commit 3963d6363a2501ccf38d8af9e72d6f0131d8e060 Author: James Kolpack Date: Fri Nov 30 21:35:06 2012 -0500 Initial diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..412eeda --- /dev/null +++ b/.gitattributes @@ -0,0 +1,22 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp +*.sln merge=union +*.csproj merge=union +*.vbproj merge=union +*.fsproj merge=union +*.dbproj merge=union + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ebd21a --- /dev/null +++ b/.gitignore @@ -0,0 +1,163 @@ +################# +## Eclipse +################# + +*.pydevproject +.project +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.classpath +.settings/ +.loadpath + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# CDT-specific +.cproject + +# PDT-specific +.buildpath + + +################# +## Visual Studio +################# + +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.vspscc +.builds +*.dotCover + +## TODO: If you have NuGet Package Restore enabled, uncomment this +#packages/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf + +# Visual Studio profiler +*.psess +*.vsp + +# ReSharper is a .NET coding add-in +_ReSharper* + +# Installshield output folder +[Ee]xpress + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish + +# Others +[Bb]in +[Oo]bj +sql +TestResults +*.Cache +ClientBin +stylecop.* +~$* +*.dbmdl +Generated_Code #added for RIA/Silverlight projects + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML + + + +############ +## Windows +############ + +# Windows image file caches +Thumbs.db + +# Folder config file +Desktop.ini + + +############# +## Python +############# + +*.py[co] + +# Packages +*.egg +*.egg-info +dist +build +eggs +parts +bin +var +sdist +develop-eggs +.installed.cfg + +# Installer logs +pip-log.txt + +# Unit test / coverage reports +.coverage +.tox + +#Translations +*.mo + +#Mr Developer +.mr.developer.cfg + +# Mac crap +.DS_Store diff --git a/ETHRAVehicles2011-07-30.xls b/ETHRAVehicles2011-07-30.xls new file mode 100644 index 0000000..12571cc Binary files /dev/null and b/ETHRAVehicles2011-07-30.xls differ diff --git a/MileageTraker.sln b/MileageTraker.sln new file mode 100644 index 0000000..ec909a8 --- /dev/null +++ b/MileageTraker.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web", "Web\Web.csproj", "{36D4C321-E918-460F-B348-16A805F88884}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Web.Tests", "Web.Tests\Web.Tests.csproj", "{A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {36D4C321-E918-460F-B348-16A805F88884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36D4C321-E918-460F-B348-16A805F88884}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36D4C321-E918-460F-B348-16A805F88884}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36D4C321-E918-460F-B348-16A805F88884}.Release|Any CPU.Build.0 = Release|Any CPU + {A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/MileageTraker.vsmdi b/MileageTraker.vsmdi new file mode 100644 index 0000000..e44842f --- /dev/null +++ b/MileageTraker.vsmdi @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Notes/2011ETHRAvehicles.xls b/Notes/2011ETHRAvehicles.xls new file mode 100644 index 0000000..21e4653 Binary files /dev/null and b/Notes/2011ETHRAvehicles.xls differ diff --git a/Notes/Header.psd b/Notes/Header.psd new file mode 100644 index 0000000..c7f3ce9 Binary files /dev/null and b/Notes/Header.psd differ diff --git a/Notes/myImage (3).png b/Notes/myImage (3).png new file mode 100644 index 0000000..5025453 Binary files /dev/null and b/Notes/myImage (3).png differ diff --git a/Web.Tests/CreateLogControllerTest.cs b/Web.Tests/CreateLogControllerTest.cs new file mode 100644 index 0000000..02c9e78 --- /dev/null +++ b/Web.Tests/CreateLogControllerTest.cs @@ -0,0 +1,30 @@ +using MileageTraker.Web.Controllers; +using System; +using MileageTraker.Web.ViewModels; +using System.Web.Mvc; +using NUnit.Framework; + +namespace Web.Tests +{ + /// + ///This is a test class for CreateLogControllerTest and is intended + ///to contain all CreateLogControllerTest Unit Tests + /// + [TestFixture] + public class CreateLogControllerTest + { + [Test] + public void IndexTest() + { + var target = new CreateLogController(); + CreateLogViewModel model = null; + ActionResult expected = null; + ActionResult actual; + + actual = target.Index(model); + + Assert.AreEqual(expected, actual); + Assert.Inconclusive("Verify the correctness of this test method."); + } + } +} diff --git a/Web.Tests/DAL/VehicleImporterTests.cs b/Web.Tests/DAL/VehicleImporterTests.cs new file mode 100644 index 0000000..92b0b3d --- /dev/null +++ b/Web.Tests/DAL/VehicleImporterTests.cs @@ -0,0 +1,31 @@ +using System; +using System.IO; +using System.Linq; +using ExcelLibrary.SpreadSheet; +using MileageTraker.Web.DAL; +using NUnit.Framework; + +namespace Web.Tests.DAL +{ + [TestFixture] + public class VehicleImporterTests + { + [Test] + public void Import_Gets_More_Than_One_Result() + { + var vehicles = VehicleImporter.Import("DAL\\Vehicles.xls"); + + Assert.That(vehicles.Count(), Is.GreaterThan(0)); + } + + [Test] + public void Export_Saves_A_File() + { + var vehicles = VehicleImporter.Import("DAL\\Vehicles.xls"); + const string filename = @"VehiclesExport.xls"; + VehicleImporter.Export(vehicles, filename); + Assert.That(File.Exists(filename)); + File.Delete(filename); + } + } +} diff --git a/Web.Tests/DAL/Vehicles.xls b/Web.Tests/DAL/Vehicles.xls new file mode 100644 index 0000000..509528d Binary files /dev/null and b/Web.Tests/DAL/Vehicles.xls differ diff --git a/Web.Tests/Properties/AssemblyInfo.cs b/Web.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..47107de --- /dev/null +++ b/Web.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Web.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Web.Tests")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("76250afd-71db-419d-9cac-e10201c622f0")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Web.Tests/Utility/AlgorithmsTests.cs b/Web.Tests/Utility/AlgorithmsTests.cs new file mode 100644 index 0000000..b8a4b43 --- /dev/null +++ b/Web.Tests/Utility/AlgorithmsTests.cs @@ -0,0 +1,74 @@ +using System; +using MileageTraker.Web.Utility; +using NUnit.Framework; + +namespace Web.Tests.Utility +{ + [TestFixture] + public class AlgorithmsTests + { + private const int _existingNumber = 2; + private readonly DateTime _existingDate = DateTime.Today.AddDays(-1); + + [Test] + public void IsChronological_True_If_Greater_And_After() + { + var date = _existingDate.AddDays(1); + const int number = _existingNumber + 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result); + } + + [Test] + public void IsChronological_False_If_LessThan_And_After() + { + var date = _existingDate.AddDays(1); + const int number = _existingNumber - 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.False); + } + + [Test] + public void IsChronological_True_If_LessThan_And_Before() + { + var date = _existingDate.AddDays(-1); + const int number = _existingNumber - 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.True); + } + + [Test] + public void IsChronological_False_If_GreaterThan_And_Before() + { + var date = _existingDate.AddDays(-1); + const int number = _existingNumber + 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.False); + } + + [Test] + public void IsChronological_True_If_Same_And_Before() + { + var date = _existingDate.AddDays(-1); + const int number = _existingNumber; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.True); + } + + + [Test] + public void IsChronological_True_If_Greater_And_SameTime() + { + var date = _existingDate; + const int number = _existingNumber + 1; + var result = Algorithms.IsChronological(_existingDate, _existingNumber, date, number); + + Assert.That(result, Is.True); + } + } +} \ No newline at end of file diff --git a/Web.Tests/Utility/CustomExtensionsTests.cs b/Web.Tests/Utility/CustomExtensionsTests.cs new file mode 100644 index 0000000..180cdc5 --- /dev/null +++ b/Web.Tests/Utility/CustomExtensionsTests.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using MileageTraker.Web.Utility; +using NUnit.Framework; + +namespace Web.Tests.Utility +{ + [TestFixture] + public class CustomExtensionsTests + { + [Test] + public void TimeSpan_ToReadableString_Yesterday() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-1)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("Yesterday")); + } + + [Test] + public void TimeSpan_ToReadableString_Today() + { + var s = (DateTime.Today - DateTime.Today).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("Today")); + } + + [Test] + public void TimeSpan_ToReadableString_TwoDaysAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-2)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("2 days ago")); + } + + [Test] + public void TimeSpan_ToReadableString_OneWeekAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-7)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week ago")); + } + + [Test] + public void TimeSpan_ToReadableString_OneWeekOneDayAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-8)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week, 1 day ago")); + } + + [Test] + public void TimeSpan_ToReadableString_OneWeekTwoDaysAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-9)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week, 2 days ago")); + } + + [Test] + public void TimeSpan_ToReadableString_TwoWeeksAgo() + { + var s = (DateTime.Today - DateTime.Today.AddDays(-7)).ToVerboseStringHistoric(); + + Assert.That(s, Is.EqualTo("1 week ago")); + } + } +} diff --git a/Web.Tests/ViewModels/CreateLogViewModelTests.cs b/Web.Tests/ViewModels/CreateLogViewModelTests.cs new file mode 100644 index 0000000..fbff223 --- /dev/null +++ b/Web.Tests/ViewModels/CreateLogViewModelTests.cs @@ -0,0 +1,71 @@ +using System; +using MileageTraker.Web.Models; +using MileageTraker.Web.ViewModels; +using NUnit.Framework; + +namespace Web.Tests.ViewModels +{ + [TestFixture] + public class CreateLogViewModelTests + { + [Test] + public void GetLog_Converts_To_Log() + { + var cityName = "My Town"; + var date = DateTime.Today.ToString("d"); + var employeeName = "Name"; + var endOdometer = "1234"; + var ethraId = "4567"; + string gasPurchased = "2.546"; + var mileageLogType = new MileageLogTypeWrapper {Enum = MileageLogType.Commuting}; + + var viewModel = + new CreateLogViewModel + { + CityName = cityName, + Date = date, + EmployeeName = employeeName, + EndOdometer = endOdometer, + VehicleId = ethraId, + GasPurchased = gasPurchased, + LogType = mileageLogType + }; + + var log = viewModel.GetLog(); + } + + [Test] + public void Ctor_Initializes_From_Log() + { + var cityName = "My Town"; + var date = DateTime.Today; + var employeeName = "Name"; + var endOdometer = 1234; + var ethraId = "4567"; + var gasPurchased = 2.546d; + var mileageLogType = MileageLogType.Commuting; + + var log = + new Log + { + CityName = cityName, + Date = date, + EmployeeName = employeeName, + EndOdometer = endOdometer, + VehicleId = ethraId, + GasPurchased = gasPurchased, + LogType = mileageLogType + }; + + var viewModel = new CreateLogViewModel(log); + + Assert.That(viewModel.CityName, Is.EqualTo(cityName)); + Assert.That(viewModel.Date, Is.EqualTo(date.ToString("d"))); + Assert.That(viewModel.EmployeeName, Is.EqualTo(employeeName)); + Assert.That(viewModel.EndOdometer, Is.EqualTo(endOdometer.ToString())); + Assert.That(viewModel.VehicleId, Is.EqualTo(ethraId)); + Assert.That(viewModel.GasPurchased, Is.EqualTo(gasPurchased.ToString())); + Assert.That(viewModel.LogType.Enum, Is.EqualTo(mileageLogType)); + } + } +} diff --git a/Web.Tests/Web.Tests.csproj b/Web.Tests/Web.Tests.csproj new file mode 100644 index 0000000..f061538 --- /dev/null +++ b/Web.Tests/Web.Tests.csproj @@ -0,0 +1,89 @@ + + + + Debug + AnyCPU + + + 2.0 + {A2CF2B7A-A0A7-4A32-895C-A7B4DBC57722} + Library + Properties + Web.Tests + Web.Tests + v4.0 + 512 + {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\ExcelLibrary.1.2011.7.30\lib\ExcelLibrary.dll + + + ..\packages\NUnit.2.6.0.12054\lib\nunit.framework.dll + + + + + 3.5 + + + + + True + + + + + False + + + + + + + + + + + + + PreserveNewest + + + + + {36D4C321-E918-460F-B348-16A805F88884} + Web + + + + + + + + + \ No newline at end of file diff --git a/Web.Tests/packages.config b/Web.Tests/packages.config new file mode 100644 index 0000000..e57cab0 --- /dev/null +++ b/Web.Tests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Web/App_Data/2011ETHRAvehicles.xls b/Web/App_Data/2011ETHRAvehicles.xls new file mode 100644 index 0000000..1760c22 Binary files /dev/null and b/Web/App_Data/2011ETHRAvehicles.xls differ diff --git a/Web/App_Data/Cities.xls b/Web/App_Data/Cities.xls new file mode 100644 index 0000000..8804485 Binary files /dev/null and b/Web/App_Data/Cities.xls differ diff --git a/Web/Content/Background.png b/Web/Content/Background.png new file mode 100644 index 0000000..8e27c55 Binary files /dev/null and b/Web/Content/Background.png differ diff --git a/Web/Content/BlackBerry.css b/Web/Content/BlackBerry.css new file mode 100644 index 0000000..41097c0 --- /dev/null +++ b/Web/Content/BlackBerry.css @@ -0,0 +1,4 @@ +body +{ + width: 315px; +} diff --git a/Web/Content/CreateLog/BlackBerry.css b/Web/Content/CreateLog/BlackBerry.css new file mode 100644 index 0000000..58f816e --- /dev/null +++ b/Web/Content/CreateLog/BlackBerry.css @@ -0,0 +1,25 @@ +.editor-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 8px; +} + +.display-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 8px; +} + +.logType.editor-field-container +{ + padding-right: 0px; +} + +.submit +{ + display: inline-block; + padding-left: 20px; + vertical-align: middle; +} \ No newline at end of file diff --git a/Web/Content/CreateLog/Index.css b/Web/Content/CreateLog/Index.css new file mode 100644 index 0000000..bc38a92 --- /dev/null +++ b/Web/Content/CreateLog/Index.css @@ -0,0 +1,22 @@ + +fieldset +{ + width: 375px; + margin-left: auto; + margin-right: auto; +} + +.display-field-container, .editor-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 15px; + padding-bottom: 20px; +} + +.submit +{ + display: inline-block; + padding-left: 40px; + padding-top: 27px; +} diff --git a/Web/Content/Header.png b/Web/Content/Header.png new file mode 100644 index 0000000..fdf2999 Binary files /dev/null and b/Web/Content/Header.png differ diff --git a/Web/Content/Header_white.png b/Web/Content/Header_white.png new file mode 100644 index 0000000..5f0c3f9 Binary files /dev/null and b/Web/Content/Header_white.png differ diff --git a/Web/Content/Rainbow.png b/Web/Content/Rainbow.png new file mode 100644 index 0000000..0c4162c Binary files /dev/null and b/Web/Content/Rainbow.png differ diff --git a/Web/Content/Site.css b/Web/Content/Site.css new file mode 100644 index 0000000..9056c93 --- /dev/null +++ b/Web/Content/Site.css @@ -0,0 +1,465 @@ +body +{ + background-image: url('/Content/Background.png'); + background-repeat: repeat-x; + background-color: #b4eff6; + font-size: 85%; + font-family: "lucida grande",tahoma,verdana,arial,sans-serif; + margin: 0; + padding: 0; + color: #696969; +} + +a:link { + color: #2f3569; + text-decoration: underline; +} + +a:visited { + color: #1f2346; + text-decoration: underline; +} + +a:hover { + color: #b76d00; + text-decoration: none; +} + +a:active { + color: #d57f00; +} + +p, ul { + margin-bottom: 20px; + line-height: 1.6em; +} + +header, +footer, +nav, +section { + display: block; +} + +/* HEADINGS +----------------------------------------------------------*/ +h1, h2, h3, h4, h5, h6 { + font-size: 1.5em; + color: #000; +} + +h1 { + font-size: 2em; + padding-bottom: 0; + margin-bottom: 0; +} + +h2 { + padding: 0 0 5px 0; +} + +h3 { + font-size: 1.2em; +} + +h4 { + font-size: 1.1em; +} + +h5, h6 { + font-size: 1em; +} + +/* PRIMARY LAYOUT ELEMENTS +----------------------------------------------------------*/ + +/* you can specify a greater or lesser percentage for the +page width. Or, you can specify an exact pixel width. */ +.page { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +header, #header { + position: relative; + margin-bottom: 0px; + color: #000; + padding: 0; +} + +header h1, #header h1 { + font-weight: bold; + padding: 5px 0; + margin: 0; + color: #fff; + border: none; + line-height: 2em; + font-size: 32px !important; +} + +#header h1 a +{ + color: #fff; + text-decoration: none; +} + +#main +{ + clear: both; + padding: 30px 30px 15px 30px; + background-color: #fff; + border-radius: 4px 0 0 0; + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; +} + +footer, +#footer { + background-color: #777; + color: #444; + padding: 10px 0; + text-align: center; + line-height: normal; + margin: 0 0 30px 0; + font-size: .9em; + border-radius: 0 0 4px 4px; + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; +} + +/* TAB MENU +----------------------------------------------------------*/ +ul#menu { + border-bottom: 1px #73acb3 solid; + padding: 0 0 2px; + position: relative; + margin: 0; + text-align: right; +} + +ul#menu li { + display: inline; + list-style: none; +} + +ul#menu li#greeting { + padding: 10px 20px; + font-weight: bold; + text-decoration: none; + line-height: 2.8em; + color: #fff; +} + +ul#menu li a { + padding: 10px 20px; + font-weight: bold; + text-decoration: none; + line-height: 2.8em; + background-color: #d0d9c2; + color: #d57f00; + border-radius: 4px 4px 0 0; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; +} + +ul#menu li a:hover { + background-color: #f1fff8; + text-decoration: none; +} + +ul#menu li a:active { + background-color: #f1fff8; + text-decoration: none; +} + +ul#menu li.selected a { + background-color: #fff; + color: #000; +} + +/* FORM LAYOUT ELEMENTS +----------------------------------------------------------*/ + +fieldset +{ + border: 2px solid #81B3B3; + width: 675px; + padding: 0 1.4em 1.4em 1.4em; + margin-right: auto; +} + +legend { + font-size: 1.2em; + font-weight: bold; +} + +textarea { + min-height: 75px; +} + +input[type="text"], +input[type="password"] { + border: 1px solid #ccc; + color: #444; + width: 200px; + width: 100px; +} + +select { + border: 1px solid #ccc; + padding: 2px; + color: #444; +} + +/* TABLE +----------------------------------------------------------*/ + +table { + border: solid 1px #e4f2f2; + border-collapse: collapse; +} + +table td { + padding: 4px; + border: solid 1px #e4f2f2; +} + +table th { + padding: 6px 4px; + text-align: left; + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + +tbody td:nth-of-type(odd), +tbody tr:nth-of-type(odd){ + background:rgba(232, 238, 244, 0.25); +} + +table tfoot td { + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + + +/* MISC +----------------------------------------------------------*/ +.clear { + clear: both; +} + +.error { + color: Red; +} + +nav, +#menucontainer { + margin-top: 5px; + clear: both; + float: left; +} + +div#title { + display: block; + float: left; + text-align: left; +} + +div#title a +{ + border-width: 0px; +} + +form#filter +{ + display: inline-block; +} +div#newLog +{ + display: inline-block; +} + + +/* Styles for validation helpers +-----------------------------------------------------------*/ +.field-validation-error { + color: #AA5755; + display: block; +} + +.field-validation-valid { + display: none; +} + +.input-validation-error { + border: 1px solid #6E1E1C; + background-color: #F3E2E2; +} + +.validation-summary-errors { + font-weight: bold; + color: #ff0000; +} + +.validation-summary-valid { + display: none; +} + +/* Styles for editor and display helpers +----------------------------------------------------------*/ +.display-field-container, .editor-field-container +{ + display: inline-block; + vertical-align: top; + padding-right: 15px; + padding-bottom: 10px; +} + +.display-label, +.editor-label +{ + color: #7F6F50; + margin: 1em 0 0 0; +} + +.display-field, +.editor-field { + margin: 0.5em 0 0 0; + font-weight: bold; +} + +.text-box { + width: 30em; +} + +.text-box.multi-line { + height: 6.5em; +} + +.tri-state { + width: 6em; +} + +.format-hint +{ + color: #806F50; + font-size: .8em; + font-style: italic; + margin-top: 2px; + padding-left: 5px; +} + + +/* Input types */ + +.vehicleId input +{ + width: 60px; +} + +.endOdometer input +{ + width: 60px; +} + +.gasPurchased input +{ + width: 45px; +} + +.date input +{ + width: 70px; +} + +.units +{ + font-size: .9em; +} + +.employeeName input +{ + width: 135px; +} + +.cityName input +{ + width: 125px; +} + +.logType .radiobutton +{ + display: block; +} + +.modelYear input +{ + width: 40px; +} + +.make input +{ + width: 80px +} + +.key input +{ + width: 30px +} + +.model input +{ + width: 80px +} + +.vin input +{ + width: 150px +} + +.report-miles +{ + text-decoration: underline; +} + +.report-calculation +{ + display: none; +} + +.report-calculation table +{ + width: 100%; +} + +.ui-icon +{ +display: inline-block !important; +} + +.qtip-content h5 +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.qtip-content p +{ + margin-top: 3px; + margin-bottom: 3px; +} + +.ui-message +{ + display: block; + margin-top: 10px; + padding: 3px; +} + +@media print { + #header, + #footer, + .no-print + { display:none } +} \ No newline at end of file diff --git a/Web/Content/Site.min.css b/Web/Content/Site.min.css new file mode 100644 index 0000000..4bcfdc3 --- /dev/null +++ b/Web/Content/Site.min.css @@ -0,0 +1,253 @@ +body +{ + font-size: 75%; + font-family: "lucida grande",tahoma,verdana,arial,sans-serif; + color: #232323; + background-color: #fff; +} + +#header +{ + width: 452px; + margin-left: auto; + margin-right: auto; +} + +input[type="radio"] +{ + margin-left: 3px; +} + +h4 +{ + color: #366; + margin: 3px; +} + + +/* TABLE +----------------------------------------------------------*/ + +table { + border: solid 1px #e4f2f2; + border-collapse: collapse; +} + +table td { + padding: 4px; + border: solid 1px #e4f2f2; +} + +table th +{ + color: #7F6F50; + padding: 6px 4px; + text-align: left; + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + +tbody td:nth-of-type(odd), +tbody tr:nth-of-type(odd){ + background:rgba(228,242,242, 0.25); +} + +table tfoot td { + background-color: #e4f2f2; + border: solid 1px #e4f2f2; +} + +/* Styles for basic forms http://colorschemedesigner.com/#3i31Sg0llw0w0 +-----------------------------------------------------------*/ + +fieldset +{ + border:2px solid #81B3B3; + padding:0 1.4em 1.4em 1.4em; + margin:0 0 1.5em 0; +} + +legend +{ + color: #366; + font-size:1.2em; + font-weight: bold; +} + +textarea +{ + min-height: 75px; +} + +.editor-label +{ + color: #7F6F50; + margin: 1em 0 0 0; + font-weight: bold; +} + +.editor-field +{ + margin:0.2em 0 0 0; +} + + +.display-label +{ + color: #7F6F50; + margin: 1em 0 0 0; + font-weight: bold; +} + +.display-field +{ + margin:0.2em 0 0 0; +} + + +/* Styles for validation helpers +-----------------------------------------------------------*/ +.field-validation-error +{ + color: #AA5755; + display: block; +} + +.field-validation-valid +{ + display: none; +} + +.input-validation-error +{ + border: 1px solid #6E1E1C; + background-color: #F3E2E2; +} + +.validation-summary-errors +{ + font-weight: bold; + color: #AA5755; +} + +.validation-summary-valid +{ + display: none; +} + +/* Input types */ + +.vehicleId input +{ + width: 60px; +} + +.endOdometer input +{ + width: 60px; +} + +.gasPurchased input +{ + width: 45px; +} + +.date input +{ + width: 70px; +} + +.units +{ + font-size: .9em; +} + +.employeeName input +{ + width: 135px; +} + +.cityName input +{ + width: 125px; +} + +.logType .radiobutton +{ + display: block; +} + +/* Errors */ + + +.vehicle-id .field-validation-error +{ + width: 60px; +} + +.odometer .field-validation-error +{ + width: 80px; +} + +.gas .field-validation-error +{ + width: 45px; +} + +.date .field-validation-error +{ + width: 70px; +} + +.employeeName .field-validation-error +{ + width: 135px; +} + +.cityName .field-validation-error +{ + width: 125px; +} + +/* hint! */ + +.format-hint +{ + color: #806F50; + font-size: .8em; + font-style: italic; + margin-top: 2px; + padding-left: 5px; +} + +.subscript +{ + font-size: .8em; + font-style: italic; +} + +.warning +{ + background-color: yellow; +} + +span#icon-employee-history +{ + position: relative; + display: inline-block; + left: -20px; + bottom: -3px; + margin-right: -20px; +} + +.transparent { + opacity: 0.1; +} + +.loading { + background-image: url('/Content/spinner.gif'); + background-repeat: no-repeat; + background-position: right; + padding-right: 20px; +} \ No newline at end of file diff --git a/Web/Content/VehicleColors.css b/Web/Content/VehicleColors.css new file mode 100644 index 0000000..fab6326 --- /dev/null +++ b/Web/Content/VehicleColors.css @@ -0,0 +1,84 @@ + +.White +{ + color:Gray; + background-color: White; +} + +.Gold +{ + color:Black; + background-color: #E8D138; +} + +.Maroon +{ + color:White; + background-color: #800000; +} + +.Green +{ + color:White; + background-color: #008000; +} + +.Black +{ + color:White; + background-color: Black; +} + +.Blue +{ + color:White; + background-color: #0000D0; +} + +.DkBlue +{ + color:White; + background-color: #000080; +} + +.Purple +{ + color:White; + background-color: Purple; +} + +.Beige +{ + color: Black; + background-color: #F5F5DC; +} + +.Silver,.SilverIce +{ + color: Black; + background-color: #C0C0C0; +} + +.Burgundy, .Burgandy +{ + color: White; + background-color: #900020; +} + +.Brown +{ + color: White; + background-color: rgb(111, 81, 0); +} + +.Red +{ + color: White; + background-color: Red; +} + +.Unknown +{ + color: Black; + background-image: url('/Content/Rainbow.png'); +} \ No newline at end of file diff --git a/Web/Content/spinner.gif b/Web/Content/spinner.gif new file mode 100644 index 0000000..1ed786f Binary files /dev/null and b/Web/Content/spinner.gif differ diff --git a/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png b/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png b/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..ac8b229 Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..ad3d634 Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..5a46b47 Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..86c2baa Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png b/Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..4443fdc Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..7c9fa6c Binary files /dev/null and b/Web/Content/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/Web/Content/themes/base/images/ui-icons_222222_256x240.png b/Web/Content/themes/base/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..ee039dc Binary files /dev/null and b/Web/Content/themes/base/images/ui-icons_222222_256x240.png differ diff --git a/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png b/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..45e8928 Binary files /dev/null and b/Web/Content/themes/base/images/ui-icons_2e83ff_256x240.png differ diff --git a/Web/Content/themes/base/images/ui-icons_454545_256x240.png b/Web/Content/themes/base/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..7ec70d1 Binary files /dev/null and b/Web/Content/themes/base/images/ui-icons_454545_256x240.png differ diff --git a/Web/Content/themes/base/images/ui-icons_888888_256x240.png b/Web/Content/themes/base/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..5ba708c Binary files /dev/null and b/Web/Content/themes/base/images/ui-icons_888888_256x240.png differ diff --git a/Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png b/Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..7930a55 Binary files /dev/null and b/Web/Content/themes/base/images/ui-icons_cd0a0a_256x240.png differ diff --git a/Web/Content/themes/base/jquery-ui.css b/Web/Content/themes/base/jquery-ui.css new file mode 100644 index 0000000..37fcca7 --- /dev/null +++ b/Web/Content/themes/base/jquery-ui.css @@ -0,0 +1,466 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } + +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.19 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} + +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ + +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } + +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } + +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.accordion.css b/Web/Content/themes/base/jquery.ui.accordion.css new file mode 100644 index 0000000..b98034f --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.accordion.css @@ -0,0 +1,19 @@ +/*! + * jQuery UI Accordion 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Accordion#theming + */ +/* IE/Win - Fix animation bug - #4615 */ +.ui-accordion { width: 100%; } +.ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } +.ui-accordion .ui-accordion-li-fix { display: inline; } +.ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } +.ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } +.ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } +.ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } +.ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } +.ui-accordion .ui-accordion-content-active { display: block; } diff --git a/Web/Content/themes/base/jquery.ui.all.css b/Web/Content/themes/base/jquery.ui.all.css new file mode 100644 index 0000000..3932c99 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.all.css @@ -0,0 +1,11 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming + */ +@import "jquery.ui.base.css"; +@import "jquery.ui.theme.css"; diff --git a/Web/Content/themes/base/jquery.ui.autocomplete.css b/Web/Content/themes/base/jquery.ui.autocomplete.css new file mode 100644 index 0000000..7ca513b --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.autocomplete.css @@ -0,0 +1,53 @@ +/*! + * jQuery UI Autocomplete 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.19 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} diff --git a/Web/Content/themes/base/jquery.ui.base.css b/Web/Content/themes/base/jquery.ui.base.css new file mode 100644 index 0000000..6598e80 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.base.css @@ -0,0 +1,21 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming + */ +@import url("jquery.ui.core.css"); + +@import url("jquery.ui.accordion.css"); +@import url("jquery.ui.autocomplete.css"); +@import url("jquery.ui.button.css"); +@import url("jquery.ui.datepicker.css"); +@import url("jquery.ui.dialog.css"); +@import url("jquery.ui.progressbar.css"); +@import url("jquery.ui.resizable.css"); +@import url("jquery.ui.selectable.css"); +@import url("jquery.ui.slider.css"); +@import url("jquery.ui.tabs.css"); diff --git a/Web/Content/themes/base/jquery.ui.button.css b/Web/Content/themes/base/jquery.ui.button.css new file mode 100644 index 0000000..8b3de3d --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.button.css @@ -0,0 +1,38 @@ +/*! + * jQuery UI Button 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; line-height: 1.4; } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ diff --git a/Web/Content/themes/base/jquery.ui.core.css b/Web/Content/themes/base/jquery.ui.core.css new file mode 100644 index 0000000..38b5426 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.core.css @@ -0,0 +1,38 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } diff --git a/Web/Content/themes/base/jquery.ui.datepicker.css b/Web/Content/themes/base/jquery.ui.datepicker.css new file mode 100644 index 0000000..bb532e0 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.datepicker.css @@ -0,0 +1,68 @@ +/*! + * jQuery UI Datepicker 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; font-size:0em; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.dialog.css b/Web/Content/themes/base/jquery.ui.dialog.css new file mode 100644 index 0000000..6bac05c --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.dialog.css @@ -0,0 +1,21 @@ +/*! + * jQuery UI Dialog 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/Web/Content/themes/base/jquery.ui.progressbar.css b/Web/Content/themes/base/jquery.ui.progressbar.css new file mode 100644 index 0000000..9e86586 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.progressbar.css @@ -0,0 +1,11 @@ +/*! + * jQuery UI Progressbar 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Progressbar#theming + */ +.ui-progressbar { height:2em; text-align: left; overflow: hidden; } +.ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; } \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.resizable.css b/Web/Content/themes/base/jquery.ui.resizable.css new file mode 100644 index 0000000..57b7158 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.resizable.css @@ -0,0 +1,20 @@ +/*! + * jQuery UI Resizable 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; } +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;} \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.selectable.css b/Web/Content/themes/base/jquery.ui.selectable.css new file mode 100644 index 0000000..d3ef7c3 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.selectable.css @@ -0,0 +1,10 @@ +/*! + * jQuery UI Selectable 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } diff --git a/Web/Content/themes/base/jquery.ui.slider.css b/Web/Content/themes/base/jquery.ui.slider.css new file mode 100644 index 0000000..1491d6b --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.slider.css @@ -0,0 +1,24 @@ +/*! + * jQuery UI Slider 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/Web/Content/themes/base/jquery.ui.tabs.css b/Web/Content/themes/base/jquery.ui.tabs.css new file mode 100644 index 0000000..20bc1ca --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.tabs.css @@ -0,0 +1,18 @@ +/*! + * jQuery UI Tabs 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } diff --git a/Web/Content/themes/base/jquery.ui.theme.css b/Web/Content/themes/base/jquery.ui.theme.css new file mode 100644 index 0000000..9e16251 --- /dev/null +++ b/Web/Content/themes/base/jquery.ui.theme.css @@ -0,0 +1,247 @@ +/*! + * jQuery UI CSS Framework 1.8.19 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/ + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } +.ui-widget-content a { color: #222222/*{fcContent}*/; } +.ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } +.ui-widget-header a { color: #222222/*{fcHeader}*/; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } +.ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; -khtml-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; -khtml-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; -khtml-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } +.ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -khtml-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } \ No newline at end of file diff --git a/Web/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png b/Web/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png b/Web/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..ac8b229 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png new file mode 100644 index 0000000..ad3d634 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..5a46b47 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..86c2baa Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png b/Web/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000..4443fdc Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png differ diff --git a/Web/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Web/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000..7c9fa6c Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png differ diff --git a/Web/Content/themes/base/minified/images/ui-icons_222222_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..ee039dc Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-icons_222222_256x240.png differ diff --git a/Web/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..45e8928 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-icons_2e83ff_256x240.png differ diff --git a/Web/Content/themes/base/minified/images/ui-icons_454545_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..7ec70d1 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-icons_454545_256x240.png differ diff --git a/Web/Content/themes/base/minified/images/ui-icons_888888_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..5ba708c Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-icons_888888_256x240.png differ diff --git a/Web/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png b/Web/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..7930a55 Binary files /dev/null and b/Web/Content/themes/base/minified/images/ui-icons_cd0a0a_256x240.png differ diff --git a/Web/Content/themes/base/minified/jquery-ui.min.css b/Web/Content/themes/base/minified/jquery-ui.min.css new file mode 100644 index 0000000..2877280 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery-ui.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.css, jquery.ui.accordion.css, jquery.ui.autocomplete.css, jquery.ui.button.css, jquery.ui.datepicker.css, jquery.ui.dialog.css, jquery.ui.progressbar.css, jquery.ui.resizable.css, jquery.ui.selectable.css, jquery.ui.slider.css, jquery.ui.tabs.css, jquery.ui.theme.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%}.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block}.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px}.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0}.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px}.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%}.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px}.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget:active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.accordion.min.css b/Web/Content/themes/base/minified/jquery.ui.accordion.min.css new file mode 100644 index 0000000..0fc31a0 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.accordion.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.accordion.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-accordion{width:100%}.ui-accordion .ui-accordion-header{cursor:pointer;position:relative;margin-top:1px;zoom:1}.ui-accordion .ui-accordion-li-fix{display:inline}.ui-accordion .ui-accordion-header-active{border-bottom:0!important}.ui-accordion .ui-accordion-header a{display:block;font-size:1em;padding:.5em .5em .5em .7em}.ui-accordion-icons .ui-accordion-header a{padding-left:2.2em}.ui-accordion .ui-accordion-header .ui-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;margin-top:-2px;position:relative;top:1px;margin-bottom:2px;overflow:auto;display:none;zoom:1}.ui-accordion .ui-accordion-content-active{display:block} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css b/Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css new file mode 100644 index 0000000..0542c26 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.autocomplete.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.autocomplete.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-autocomplete{position:absolute;cursor:default}* html .ui-autocomplete{width:1px}.ui-menu{list-style:none;padding:2px;margin:0;display:block;float:left}.ui-menu .ui-menu{margin-top:-3px}.ui-menu .ui-menu-item{margin:0;padding:0;zoom:1;float:left;clear:left;width:100%}.ui-menu .ui-menu-item a{text-decoration:none;display:block;padding:.2em .4em;line-height:1.5;zoom:1}.ui-menu .ui-menu-item a.ui-state-hover,.ui-menu .ui-menu-item a.ui-state-active{font-weight:normal;margin:-1px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.button.min.css b/Web/Content/themes/base/minified/jquery.ui.button.min.css new file mode 100644 index 0000000..9119bf7 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.button.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.button.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-button{display:inline-block;position:relative;padding:0;margin-right:.1em;text-decoration:none!important;cursor:pointer;text-align:center;zoom:1;overflow:visible}.ui-button-icon-only{width:2.2em}button.ui-button-icon-only{width:2.4em}.ui-button-icons-only{width:3.4em}button.ui-button-icons-only{width:3.7em}.ui-button .ui-button-text{display:block;line-height:1.4}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button-icon-only .ui-button-text,.ui-button-icons-only .ui-button-text{padding:.4em;text-indent:-9999999px}.ui-button-text-icon-primary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 1em .4em 2.1em}.ui-button-text-icon-secondary .ui-button-text,.ui-button-text-icons .ui-button-text{padding:.4em 2.1em .4em 1em}.ui-button-text-icons .ui-button-text{padding-left:2.1em;padding-right:2.1em}input.ui-button{padding:.4em 1em}.ui-button-icon-only .ui-icon,.ui-button-text-icon-primary .ui-icon,.ui-button-text-icon-secondary .ui-icon,.ui-button-text-icons .ui-icon,.ui-button-icons-only .ui-icon{position:absolute;top:50%;margin-top:-8px}.ui-button-icon-only .ui-icon{left:50%;margin-left:-8px}.ui-button-text-icon-primary .ui-button-icon-primary,.ui-button-text-icons .ui-button-icon-primary,.ui-button-icons-only .ui-button-icon-primary{left:.5em}.ui-button-text-icon-secondary .ui-button-icon-secondary,.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-button-text-icons .ui-button-icon-secondary,.ui-button-icons-only .ui-button-icon-secondary{right:.5em}.ui-buttonset{margin-right:7px}.ui-buttonset .ui-button{margin-left:0;margin-right:-.3em}button.ui-button::-moz-focus-inner{border:0;padding:0} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.core.min.css b/Web/Content/themes/base/minified/jquery.ui.core.min.css new file mode 100644 index 0000000..ca86368 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.core.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{position:absolute!important;clip:rect(1px);clip:rect(1px,1px,1px,1px)}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{zoom:1}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:absolute;top:0;left:0;width:100%;height:100%} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.datepicker.min.css b/Web/Content/themes/base/minified/jquery.ui.datepicker.min.css new file mode 100644 index 0000000..8599a0a --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.datepicker.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.datepicker.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:bold;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em .6em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0em}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current{float:right}.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker-cover{display:none;display position:absolute;z-index:-1;filter:mask();top:-4px;left:-4px;width:200px;height:200px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.dialog.min.css b/Web/Content/themes/base/minified/jquery.ui.dialog.min.css new file mode 100644 index 0000000..d06ad39 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.dialog.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.dialog.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-dialog{position:absolute;padding:.2em;width:300px;overflow:hidden}.ui-dialog .ui-dialog-titlebar{padding:.4em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 16px .1em 0}.ui-dialog .ui-dialog-titlebar-close{position:absolute;right:.3em;top:50%;width:19px;margin:-10px 0 0 0;padding:1px;height:18px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin:1px}.ui-dialog .ui-dialog-titlebar-close:hover,.ui-dialog .ui-dialog-titlebar-close:focus{padding:0}.ui-dialog .ui-dialog-content{position:relative;border:0;padding:.5em 1em;background:none;overflow:auto;zoom:1}.ui-dialog .ui-dialog-buttonpane{text-align:left;border-width:1px 0 0 0;background-image:none;margin:.5em 0 0 0;padding:.3em 1em .5em .4em}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}.ui-dialog .ui-dialog-buttonpane button{margin:.5em .4em .5em 0;cursor:pointer}.ui-dialog .ui-resizable-se{width:14px;height:14px;right:3px;bottom:3px}.ui-draggable .ui-dialog-titlebar{cursor:move} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.progressbar.min.css b/Web/Content/themes/base/minified/jquery.ui.progressbar.min.css new file mode 100644 index 0000000..28ded5f --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.progressbar.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.progressbar.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-progressbar{height:2em;text-align:left;overflow:hidden}.ui-progressbar .ui-progressbar-value{margin:-1px;height:100%} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.resizable.min.css b/Web/Content/themes/base/minified/jquery.ui.resizable.min.css new file mode 100644 index 0000000..a3cafb4 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.resizable.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.resizable.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-resizable{position:relative}.ui-resizable-handle{position:absolute;font-size:0.1px;z-index:99999;display:block}.ui-resizable-disabled .ui-resizable-handle,.ui-resizable-autohide .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;width:100%;top:-5px;left:0}.ui-resizable-s{cursor:s-resize;height:7px;width:100%;bottom:-5px;left:0}.ui-resizable-e{cursor:e-resize;width:7px;right:-5px;top:0;height:100%}.ui-resizable-w{cursor:w-resize;width:7px;left:-5px;top:0;height:100%}.ui-resizable-se{cursor:se-resize;width:12px;height:12px;right:1px;bottom:1px}.ui-resizable-sw{cursor:sw-resize;width:9px;height:9px;left:-5px;bottom:-5px}.ui-resizable-nw{cursor:nw-resize;width:9px;height:9px;left:-5px;top:-5px}.ui-resizable-ne{cursor:ne-resize;width:9px;height:9px;right:-5px;top:-5px} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.selectable.min.css b/Web/Content/themes/base/minified/jquery.ui.selectable.min.css new file mode 100644 index 0000000..4ae100e --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.selectable.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.selectable.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-selectable-helper{position:absolute;z-index:100;border:1px dotted black} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.slider.min.css b/Web/Content/themes/base/minified/jquery.ui.slider.min.css new file mode 100644 index 0000000..8bf7ae6 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.slider.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.tabs.min.css b/Web/Content/themes/base/minified/jquery.ui.tabs.min.css new file mode 100644 index 0000000..97468dc --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.tabs.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.tabs.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-tabs{position:relative;padding:.2em;zoom:1}.ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0}.ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:1px;margin:0 .2em 1px 0;border-bottom:0!important;padding:0;white-space:nowrap}.ui-tabs .ui-tabs-nav li a{float:left;padding:.5em 1em;text-decoration:none}.ui-tabs .ui-tabs-nav li.ui-tabs-selected{margin-bottom:0;padding-bottom:1px}.ui-tabs .ui-tabs-nav li.ui-tabs-selected a,.ui-tabs .ui-tabs-nav li.ui-state-disabled a,.ui-tabs .ui-tabs-nav li.ui-state-processing a{cursor:text}.ui-tabs .ui-tabs-nav li a,.ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a{cursor:pointer}.ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none}.ui-tabs .ui-tabs-hide{display:none!important} \ No newline at end of file diff --git a/Web/Content/themes/base/minified/jquery.ui.theme.min.css b/Web/Content/themes/base/minified/jquery.ui.theme.min.css new file mode 100644 index 0000000..00bde76 --- /dev/null +++ b/Web/Content/themes/base/minified/jquery.ui.theme.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.8.19 - 2012-04-16 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.theme.css +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-widget:active{outline:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-icon{width:16px;height:16px;background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-off{background-position:-96px -144px}.ui-icon-radio-on{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);-moz-border-radius:8px;-khtml-border-radius:8px;-webkit-border-radius:8px;border-radius:8px} \ No newline at end of file diff --git a/Web/Content/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png b/Web/Content/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100644 index 0000000..5b5dab2 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_flat_0_aaaaaa_40x100.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png b/Web/Content/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100644 index 0000000..ac8b229 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_flat_75_ffffff_40x100.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_55_ede3b1_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_55_ede3b1_1x400.png new file mode 100644 index 0000000..688f719 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_glass_55_ede3b1_1x400.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000..42ccba2 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_glass_65_ffffff_1x400.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_75_dadada_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_75_dadada_1x400.png new file mode 100644 index 0000000..5a46b47 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_glass_75_dadada_1x400.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000..86c2baa Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_glass_75_e6e6e6_1x400.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_glass_95_eca58e_1x400.png b/Web/Content/themes/custom-theme/images/ui-bg_glass_95_eca58e_1x400.png new file mode 100644 index 0000000..c1ca599 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_glass_95_eca58e_1x400.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-bg_highlight-soft_75_d0d9c2_1x100.png b/Web/Content/themes/custom-theme/images/ui-bg_highlight-soft_75_d0d9c2_1x100.png new file mode 100644 index 0000000..a9bd557 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-bg_highlight-soft_75_d0d9c2_1x100.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-icons_222222_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..b273ff1 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-icons_222222_256x240.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-icons_2e83ff_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000..09d1cdc Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-icons_2e83ff_256x240.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-icons_454545_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_454545_256x240.png new file mode 100644 index 0000000..59bd45b Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-icons_454545_256x240.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-icons_888888_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000..6d02426 Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-icons_888888_256x240.png differ diff --git a/Web/Content/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png b/Web/Content/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000..2ab019b Binary files /dev/null and b/Web/Content/themes/custom-theme/images/ui-icons_cd0a0a_256x240.png differ diff --git a/Web/Content/themes/custom-theme/jquery-ui-1.8.13.custom.css b/Web/Content/themes/custom-theme/jquery-ui-1.8.13.custom.css new file mode 100644 index 0000000..7a4c11c --- /dev/null +++ b/Web/Content/themes/custom-theme/jquery-ui-1.8.13.custom.css @@ -0,0 +1,526 @@ +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=d0d9c2&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=d57f00&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=d57f00&iconColorActive=454545&bgColorHighlight=ede3b1&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=eca58e&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #aaaaaa; background: #d0d9c2 url(images/ui-bg_highlight-soft_75_d0d9c2_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; } +.ui-widget-header a { color: #222222; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #d57f00; } +.ui-state-hover a, .ui-state-hover a:hover { color: #d57f00; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #d57f00; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #d57f00; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #ede3b1 url(images/ui-bg_glass_55_ede3b1_1x400.png) 50% 50% repeat-x; color: #363636; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #eca58e url(images/ui-bg_glass_95_eca58e_1x400.png) 50% 50% repeat-x; color: #cd0a0a; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; } +.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; } +.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; } +.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; } + +/* Overlays */ +.ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* + * jQuery UI Resizable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Resizable#theming + */ +.ui-resizable { position: relative;} +.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block; + /* http://bugs.jqueryui.com/ticket/7233 + - Resizable: resizable handles fail to work in IE if transparent and content overlaps + */ + background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=); +} +.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } +.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } +.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } +.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } +.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } +.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } +.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } +.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } +.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* + * jQuery UI Selectable 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Selectable#theming + */ +.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } +/* + * jQuery UI Autocomplete 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Autocomplete#theming + */ +.ui-autocomplete { position: absolute; cursor: default; } + +/* workarounds */ +* html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ + +/* + * jQuery UI Menu 1.8.13 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Menu#theming + */ +.ui-menu { + list-style:none; + padding: 2px; + margin: 0; + display:block; + float: left; +} +.ui-menu .ui-menu { + margin-top: -3px; +} +.ui-menu .ui-menu-item { + margin:0; + padding: 0; + zoom: 1; + float: left; + clear: left; + width: 100%; +} +.ui-menu .ui-menu-item a { + text-decoration:none; + display:block; + padding:.2em .4em; + line-height:1.5; + zoom:1; +} +.ui-menu .ui-menu-item a.ui-state-hover, +.ui-menu .ui-menu-item a.ui-state-active { + font-weight: normal; + margin: -1px; +} +/* + * jQuery UI Button 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Button#theming + */ +.ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ +.ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ +button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ +.ui-button-icons-only { width: 3.4em; } +button.ui-button-icons-only { width: 3.7em; } + +/*button text element */ +.ui-button .ui-button-text { display: block; /*line-height: 1.4;*/ } +.ui-button-text-only .ui-button-text { padding: .4em 1em; } +.ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } +.ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } +.ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } +.ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } +/* no icon support for input elements, provide padding by default */ +input.ui-button { padding: .4em 1em; } + +/*button icon element(s) */ +.ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } +.ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } +.ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } +.ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } +.ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } + +/*button sets*/ +.ui-buttonset { margin-right: 7px; } +.ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } + +/* workarounds */ +button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ +/* + * jQuery UI Dialog 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .4em 1em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .1em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } +/* + * jQuery UI Tabs 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Tabs#theming + */ +.ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ +.ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } +.ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } +.ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } +.ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } +.ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ +.ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } +.ui-tabs .ui-tabs-hide { display: none !important; } +/* + * jQuery UI Datepicker 1.8.13 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Datepicker#theming + */ +.ui-datepicker { width: 17em; padding: .2em .2em 0; display: none; } +.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } +.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } +.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } +.ui-datepicker .ui-datepicker-prev { left:2px; } +.ui-datepicker .ui-datepicker-next { right:2px; } +.ui-datepicker .ui-datepicker-prev-hover { left:1px; } +.ui-datepicker .ui-datepicker-next-hover { right:1px; } +.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } +.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } +.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } +.ui-datepicker select.ui-datepicker-month-year {width: 100%;} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { width: 49%;} +.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } +.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } +.ui-datepicker td { border: 0; padding: 1px; } +.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } +.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } +.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { width:auto; } +.ui-datepicker-multi .ui-datepicker-group { float:left; } +.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } +.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } +.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } +.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } +.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } +.ui-datepicker-row-break { clear:both; width:100%; } + +/* RTL support */ +.ui-datepicker-rtl { direction: rtl; } +.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } +.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } +.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } +.ui-datepicker-rtl .ui-datepicker-group { float:right; } +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } + +/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ +.ui-datepicker-cover { + display: none; /*sorry for IE5*/ + display/**/: block; /*sorry for IE5*/ + position: absolute; /*must have*/ + z-index: -1; /*must have*/ + filter: mask(); /*must have*/ + top: -4px; /*must have*/ + left: -4px; /*must have*/ + width: 200px; /*must have*/ + height: 200px; /*must have*/ +} \ No newline at end of file diff --git a/Web/Controllers/CityController.cs b/Web/Controllers/CityController.cs new file mode 100644 index 0000000..ec46ed8 --- /dev/null +++ b/Web/Controllers/CityController.cs @@ -0,0 +1,16 @@ +using System.Web.Mvc; +using MileageTraker.Web.DAL; + +namespace MileageTraker.Web.Controllers +{ + public class CityController : ControllerBase + { + private readonly DataService _dataService = new DataService(); + + public JsonResult Autocomplete(string term) + { + var cities = _dataService.GetCitiesAutocomplete(term); + return Json(cities, JsonRequestBehavior.AllowGet); + } + } +} diff --git a/Web/Controllers/ControllerBase.cs b/Web/Controllers/ControllerBase.cs new file mode 100644 index 0000000..60bf842 --- /dev/null +++ b/Web/Controllers/ControllerBase.cs @@ -0,0 +1,21 @@ +using System.Web.Mvc; + +namespace MileageTraker.Web.Controllers +{ + public class ControllerBase : Controller + { + protected override void OnException(ExceptionContext filterContext) + { + if (filterContext != null && filterContext.Exception != null) + { + var controller = filterContext.RouteData.Values["controller"].ToString(); + var action = filterContext.RouteData.Values["action"].ToString(); + var loggerName = string.Format("{0}Controller.{1}", controller, action); + + log4net.LogManager.GetLogger(loggerName).Error(string.Empty, filterContext.Exception); + } + + base.OnException(filterContext); + } + } +} \ No newline at end of file diff --git a/Web/Controllers/CreateLogController.cs b/Web/Controllers/CreateLogController.cs new file mode 100644 index 0000000..160ffb7 --- /dev/null +++ b/Web/Controllers/CreateLogController.cs @@ -0,0 +1,108 @@ +using System; +using System.Web.Mvc; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Models; +using MileageTraker.Web.Utility; +using MileageTraker.Web.ViewModels; + +namespace MileageTraker.Web.Controllers +{ + public class CreateLogController : ControllerBase + { + private const string CookieKeyEmployeename = "mr_employeeName"; + private const string CookeNameVehicleid = "mr_vehicleId"; + private const string CookieKeyLogtype = "mr_logType"; + private readonly DataService _dataService = new DataService(); + + public ViewResult Index() + { + var createLogModel = NewCreateLogModel(); + + return View(createLogModel); + } + + [HttpPost] + public ActionResult Index(CreateLogViewModel model) + { + if (!ModelState.IsValid) + { + ViewBag.updateError = "Create Failure"; + if (model.LogType == null) // WTF why doesn't the model binder get this + model.LogType = new MileageLogTypeWrapper(); + return View(model); + } + + var confirmCreateLogViewModel = new ConfirmCreateLogViewModel(model); + + return View("Confirm", confirmCreateLogViewModel); + } + + [HttpParamAction] + [HttpPost] + public ViewResult Edit(CreateLogViewModel model) + { + return View("Index", model); + } + + [HttpParamAction] + [HttpPost] + [ActionLog] + public ViewResult Confirm(CreateLogViewModel model) + { + if (ModelState.IsValid) + { + SetCookieValue(CookieKeyLogtype, model.LogType.Enum.ToString()); + SetCookieValue(CookieKeyEmployeename, model.EmployeeName); + SetCookieValue(CookeNameVehicleid, model.VehicleId); + + // Save the new log + var log = model.GetLog(); + log.Source = HttpContext.Request.Url.AbsolutePath; + log.UserHostAddress = HttpContext.Request.UserHostAddress; + log.UserAgent = HttpContext.Request.UserAgent; + _dataService.AddLog(log); + return View("Success", model); + } + + return View("Index", model); + } + + public PartialViewResult RecentLogs(string employeeName) + { + var logs = _dataService.GetRecentLogsByEmployee(employeeName); + ViewData["employeeName"] = employeeName; + return PartialView(logs); + } + + private CreateLogViewModel NewCreateLogModel() + { + MileageLogType logType; + Enum.TryParse(GetCookieValue(CookieKeyLogtype), true, out logType); + var name = GetCookieValue(CookieKeyEmployeename); + var vehicleId = GetCookieValue(CookeNameVehicleid); + + return new CreateLogViewModel + { + LogType = logType, + EmployeeName = name, + VehicleId = vehicleId, + Date = DateTime.Today.ToShortDateString() + }; + } + + private string GetCookieValue(string key) + { + return + HttpContext.Request.Cookies[key] != null + ? HttpContext.Request.Cookies[key].Value + : null; + } + + private void SetCookieValue(string key, string value) + { + var cookies = HttpContext.Response.Cookies; + cookies[key].Value = value; + cookies[key].Expires = DateTime.MaxValue; + } + } +} \ No newline at end of file diff --git a/Web/Controllers/EmployeeController.cs b/Web/Controllers/EmployeeController.cs new file mode 100644 index 0000000..20b2951 --- /dev/null +++ b/Web/Controllers/EmployeeController.cs @@ -0,0 +1,16 @@ +using System.Web.Mvc; +using MileageTraker.Web.DAL; + +namespace MileageTraker.Web.Controllers +{ + public class EmployeeController : Controller + { + private readonly DataService _dataService = new DataService(); + + public JsonResult Autocomplete(string term) + { + var employees = _dataService.GetEmployeeNamesAutocomplete(term); + return Json(employees, JsonRequestBehavior.AllowGet); + } + } +} diff --git a/Web/Controllers/HomeController.cs b/Web/Controllers/HomeController.cs new file mode 100644 index 0000000..013b133 --- /dev/null +++ b/Web/Controllers/HomeController.cs @@ -0,0 +1,12 @@ +using System.Web.Mvc; + +namespace MileageTraker.Web.Controllers +{ + public class HomeController : ControllerBase + { + public ActionResult About() + { + return View(); + } + } +} diff --git a/Web/Controllers/LogController.cs b/Web/Controllers/LogController.cs new file mode 100644 index 0000000..5a6310f --- /dev/null +++ b/Web/Controllers/LogController.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web.Mvc; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Models; +using MileageTraker.Web.Utility; +using MileageTraker.Web.ViewModels; + +namespace MileageTraker.Web.Controllers +{ + public class LogController : ControllerBase + { + private readonly DataService _dataService = new DataService(); + + public ViewResult Index(LogQueryViewModel query) + { + var logs = _dataService.GetLogs(); + + var validLogYears = _dataService.GetValidLogYears().ToList(); + if (validLogYears.Count() == 0) + return View("Empty"); + if (!query.Year.HasValue) + query.Year = validLogYears.FirstOrDefault(); + + var validLogMonths = _dataService.GetValidLogMonths(query.Year.Value).ToList(); + if (!query.Month.HasValue) + query.Month = validLogMonths.FirstOrDefault(); + + var filteredLogs = + from log in _dataService.GetLogIndexViewModels(DataService.FilterLogs(logs, query)) + orderby log.Created descending + select log; + + var viewModel = + new LogResultsViewModel + { + Logs = filteredLogs, + Years = validLogYears, + Months = validLogMonths, + SelectedYear = query.Year.Value, + SelectedMonth = query.Month.Value, + SelectedLogType = query.LogType.ToString() + }; + return View(viewModel); + } + + [ActionLog] + public ActionResult Export(LogQueryViewModel query) + { + var logs = _dataService.GetLogs(); + var name = string.Format( + "MileageLogs{0}-{1}{2}", + query.Year, + query.Month, + query.LogType.HasValue ? "-" + query.LogType.Value.GetDisplayShortName() : ""); + + var export = ExcelWriter.WriteXls(DataService.FilterLogs(logs, query), name, name); + return File(export, "application/ms-excel", name + ".xls"); + } + + public ViewResult MonthlyVehicleMileage(LogQueryViewModel query) + { + var items = _dataService.GetMonthlyVehicleMileageItems(query); + + var report = new VehicleMileageViewModel (items, query); + + return View(report); + } + + public ActionResult MonthlyEmployeeMileage(LogQueryViewModel query) + { + var items = _dataService.GetMonthlyEmployeeMileageItems(query); + + var report = new EmployeeMileageViewModel(items, query); + + return View(report); + } + + public ViewResult Details(int id) + { + var log = _dataService.GetLog(id); + return View(log); + } + + public ActionResult PreviousDetails(int id) + { + var log = _dataService.GetLog(id); + var previousLog = _dataService.GetPreviousLog(log); + int logId; + if (previousLog != null) + { + logId = previousLog.LogId; + } + else + { + logId = id; + TempData["Message"] = "This is the first log for this vehicle"; + } + return RedirectToAction("Details", new {id = logId}); + } + + public ActionResult NextDetails(int id) + { + var log = _dataService.GetLog(id); + var nextLog = _dataService.GetNextLog(log); + int logId; + if (nextLog != null) + { + logId = nextLog.LogId; + } + else + { + logId = id; + TempData["Message"] = "This is the most recent log for this vehicle"; + } + return RedirectToAction("Details", new { id = logId }); + } + + public ActionResult Create() + { + var log = new Log { Date = DateTime.Today }; + var vehicleId = Request["vehicleId"]; + + if (vehicleId != null) + { + log.VehicleId = vehicleId; + } + return View(log); + } + + [HttpPost] + [ActionLog] + public ActionResult Create(Log log) + { + if (ModelState.IsValid) + { + log.Source = HttpContext.Request.Url.AbsolutePath; + log.UserHostAddress = HttpContext.Request.UserHostAddress; + log.UserAgent = HttpContext.Request.UserAgent; + + _dataService.AddLog(log); + return RedirectToAction("Index"); + } + + return View(log); + } + + public ActionResult Edit(int id) + { + var log = _dataService.GetLog(id); + return View(log); + } + + [HttpPost] + [ActionLog] + public ActionResult Edit(Log log) + { + RemoveModelStateErrors(); + if (ModelState.IsValid) + { + _dataService.UpdateLog(log); + return RedirectToAction("Details", new{id = log.LogId}); + } + return View(log); + } + + private void RemoveModelStateErrors() + { + ModelState.Remove("Source"); + ModelState.Remove("UserAgent"); + ModelState.Remove("UserHostAddress"); + } + + public ActionResult Delete(int id) + { + var log = _dataService.GetLog(id); + return View(log); + } + + [HttpPost, ActionName("Delete")] + [ActionLog] + public ActionResult DeleteConfirmed(int id) + { + _dataService.DeleteLog(id); + return RedirectToAction("Index"); + } + + public JsonResult GetValidLogMonths(int year) + { + var validLogMonths = _dataService.GetValidLogMonths(year); + return Json(validLogMonths, JsonRequestBehavior.AllowGet); + } + + public PartialViewResult DetailsPartial(int id) + { + var log = _dataService.GetLog(id); + return PartialView(new LogPartialDetails(log)); + } + + protected override void Dispose(bool disposing) + { + _dataService.Dispose(); + base.Dispose(disposing); + } + } +} \ No newline at end of file diff --git a/Web/Controllers/VehicleController.cs b/Web/Controllers/VehicleController.cs new file mode 100644 index 0000000..15d2c77 --- /dev/null +++ b/Web/Controllers/VehicleController.cs @@ -0,0 +1,84 @@ +using System; +using System.Web.Mvc; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Models; +using MileageTraker.Web.ViewModels; + +namespace MileageTraker.Web.Controllers +{ + public class VehicleController : ControllerBase + { + private readonly DataService _ds = new DataService(); + + public ViewResult Index() + { + var vehicles = _ds.GetVehicles(); + return View(vehicles); + } + + public ViewResult Details(string id) + { + var vehicle = _ds.GetVehicle(id); + return View(vehicle); + } + + public PartialViewResult DetailsPartial(string id) + { + var vehicle = _ds.GetVehicle(id); + return PartialView(new VehiclePartialDetails(vehicle)); + } + + public ActionResult Create() + { + return View(); + } + + [HttpPost] + public ActionResult Create(Vehicle vehicle) + { + if (ModelState.IsValid) + { + _ds.AddVehicle(vehicle); + return RedirectToAction("Index"); + } + + return View(vehicle); + } + + public ActionResult Edit(string id) + { + var vehicle = _ds.GetVehicle(id); + return View(vehicle); + } + + [HttpPost] + public ActionResult Edit(Vehicle vehicle) + { + if (ModelState.IsValid) + { + _ds.UpdateVehicle(vehicle); + return RedirectToAction("Details", new { id = vehicle.VehicleId }); + } + return View(vehicle); + } + + public JsonResult Exists(string vehicleId) + { + var vehicle = _ds.GetVehicle(vehicleId); + return Json(vehicle != null ? true : false, JsonRequestBehavior.AllowGet); + } + + public FileResult Export() + { + var vehicles = _ds.GetVehicles(); + var export = VehicleImporter.Export(vehicles); + return File(export, "application/ms-excel", string.Format("ETHRAVehicles{0:yyyy-MM-dd}.xls", DateTime.Today)); + } + + protected override void Dispose(bool disposing) + { + _ds.Dispose(); + base.Dispose(disposing); + } + } +} \ No newline at end of file diff --git a/Web/DAL/ChronologicalOrderException.cs b/Web/DAL/ChronologicalOrderException.cs new file mode 100644 index 0000000..000a945 --- /dev/null +++ b/Web/DAL/ChronologicalOrderException.cs @@ -0,0 +1,11 @@ +using System; + +namespace MileageTraker.Web.DAL +{ + public class ChronologicalOrderException : ApplicationException + { + public ChronologicalOrderException(string message) : base(message) + { + } + } +} \ No newline at end of file diff --git a/Web/DAL/DataService.cs b/Web/DAL/DataService.cs new file mode 100644 index 0000000..76a2363 --- /dev/null +++ b/Web/DAL/DataService.cs @@ -0,0 +1,430 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using System.Linq.Expressions; +using System.Text.RegularExpressions; +using MileageTraker.Web.Models; +using MileageTraker.Web.Utility; +using MileageTraker.Web.ViewModels; + +namespace MileageTraker.Web.DAL +{ + public class DataService : IDisposable + { + private readonly MileageTrakerContext _db = new MileageTrakerContext(); + + #region Log + + public void AddLog(Log log) + { + log.Created = DateTime.Now; + _db.Logs.Add(log); + _db.SaveChanges(); + + UpdateCurrentOdometer(log.VehicleId); + } + + public IQueryable GetLogs() + { + return _db.Logs; + } + + public Log GetLog(int id) + { + return _db.Logs.Find(id); + } + + public IEnumerable GetValidLogYears() + { + return + from l in GetLogs() + group l by new {year = l.Date.Year} + into y + orderby y.Key descending + select y.Key.year; + } + + public IEnumerable GetValidLogMonths(int year) + { + var start = new DateTime(year, 1, 1); + var end = new DateTime(year + 1, 1, 1); + return + from l in GetLogs() + where l.Date >= start && l.Date < end + group l by new { month = l.Date.Month } + into m + orderby m.Key descending + select m.Key.month; + } + + public IEnumerable GetLogIndexViewModels(IQueryable logs) + { + var t = + from log in logs + let previousLog = (from ol in _db.Logs + where ol.VehicleId == log.VehicleId && + ((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) || + (ol.EndOdometer == log.EndOdometer && ol.Created < log.Created)) + orderby ol.EndOdometer descending, ol.Created descending + select ol).FirstOrDefault() + select new {log, previousLog}; + return from l in t.ToList() + select new LogIndexViewModel(l.log, l.previousLog); + } + + public IEnumerable GetMonthlyVehicleMileageItems(LogQueryViewModel query) + { + var items = + from l in + from log in FilterLogs(_db.Logs, query) + let previousLog = (from ol in _db.Logs + where ol.VehicleId == log.VehicleId && + ((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) || + (ol.EndOdometer == log.EndOdometer && ol.Created < log.Created)) + orderby ol.EndOdometer descending, ol.Created descending + select ol).FirstOrDefault() + select new {log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0)} + group l by l.log.VehicleId + into g + join v in _db.Vehicles on g.Key equals v.VehicleId + let miles = g.Sum(l => l.miles) + let gasPurchased = g.Sum(l => l.log.GasPurchased) + where miles > 0 || gasPurchased > 0 + let logPairs = + from i in g + orderby i.log.Date descending , i.log.EndOdometer descending + select new { PreviousLog = i.previousLog, Log = i.log } + select + new + { + VehicleId = g.Key, + GasPurchased = gasPurchased, + Miles = miles, + v.Prog, + LogPairs = logPairs + }; + + return items.ToList().Select(i => new VehicleMileageItem + { + VehicleId = i.VehicleId, + GasPurchased = i.GasPurchased, + Miles = i.Miles, + Prog = i.Prog, + LogPairs = i.LogPairs.ToList() + .Select(lp => new Tuple(lp.PreviousLog, lp.Log)) + }); + } + + + public IEnumerable GetMonthlyEmployeeMileageItems(LogQueryViewModel query) + { + var items = + from l in + from log in FilterLogs(_db.Logs, query) + let previousLog = (from ol in _db.Logs + where ol.VehicleId == log.VehicleId && + ((ol.Date <= log.Date && ol.EndOdometer < log.EndOdometer) || + (ol.EndOdometer == log.EndOdometer && ol.Created < log.Created)) + orderby ol.EndOdometer descending, ol.Created descending + select ol).FirstOrDefault() + select new { log, previousLog, miles = (previousLog != null ? log.EndOdometer - previousLog.EndOdometer : 0) } + group l by l.log.EmployeeName + into g + let miles = g.Sum(l => l.miles) + let gasPurchased = g.Sum(l => l.log.GasPurchased) + where miles > 0 || gasPurchased > 0 + let logPairs = + from i in g + orderby i.log.Date descending, i.log.EndOdometer descending + select new { PreviousLog = i.previousLog, Log = i.log } + select + new + { + EmployeeName = g.Key, + GasPurchased = gasPurchased, + Miles = miles, + LogPairs = logPairs + }; + + return items.ToList().Select(i => new EmployeeMileageItem + { + EmployeeName = i.EmployeeName, + GasPurchased = i.GasPurchased, + Miles = i.Miles, + LogPairs = i.LogPairs.ToList() + .Select(lp => new Tuple(lp.PreviousLog, lp.Log)) + }); + } + + public static IQueryable FilterLogs(IQueryable logs, LogQueryViewModel query) + { + if (query.Year.HasValue & query.Month.HasValue) + { + var start = new DateTime(query.Year.Value, query.Month.Value, 1); + var end = start.AddMonths(1); + logs = logs.Where(l => l.Date >= start && l.Date < end); + } + + if (query.LogType.HasValue) + { + // WTF The specified value is not an instance of type 'Edm.Int32' + Expression> predicate; + switch (query.LogType.Value) + { + case MileageLogType.NonCommuting: + predicate = l => l.LogType.Value == 1; + break; + case MileageLogType.Commuting: + predicate = l => l.LogType.Value == 2; + break; + case MileageLogType.GasPurchase: + predicate = l => l.LogType.Value == 3; + break; + default: + throw new ArgumentOutOfRangeException(); + } + logs = logs.Where(predicate); + } + + return logs; + } + + public Log GetPreviousLog(Log current) + { + var vehicleId = current.VehicleId; + var date = current.Date; + var endOdometer = current.EndOdometer; + return GetPreviousLog(endOdometer, vehicleId, date, current.Created); + } + + public Log GetPreviousLog(int endOdometer, string vehicleId, DateTime date, DateTime created) + { + return GetPreviousLogQuery(endOdometer, vehicleId, date, created).FirstOrDefault(); + } + + private IOrderedQueryable GetPreviousLogQuery(int endOdometer, string vehicleId, DateTime date, DateTime created) + { + return from pl in _db.Logs + where pl.VehicleId == vehicleId && + ((pl.Date <= date && pl.EndOdometer < endOdometer) + || (pl.EndOdometer == endOdometer && pl.Created < created)) + orderby pl.EndOdometer descending, pl.Created descending + select pl; + } + + public Log GetNextLog(Log current) + { + var vehicleId = current.VehicleId; + var date = current.Date; + var endOdometer = current.EndOdometer; + return GetNextLog(endOdometer, vehicleId, date, current.Created); + } + + public Log GetNextLog(int endOdometer, string vehicleId, DateTime date, DateTime created) + { + return (from nl in GetLogs() + where nl.VehicleId == vehicleId && + ((nl.Date >= date && nl.EndOdometer > endOdometer) + || (nl.EndOdometer == endOdometer && nl.Created > created)) + orderby nl.EndOdometer ascending, nl.Created ascending + select nl).FirstOrDefault(); + } + + public void UpdateLog(Log log) + { + var currentLog = GetLog(log.LogId); + + // ignore these properties while updating + log.Created = currentLog.Created; + log.Source = currentLog.Source; + log.UserAgent = currentLog.UserAgent; + log.UserHostAddress = currentLog.UserHostAddress; + + _db.Entry(currentLog).CurrentValues.SetValues(log); + + _db.Entry(currentLog).State = EntityState.Modified; + _db.SaveChanges(); + + UpdateCurrentOdometer(log.VehicleId); + } + + public void DeleteLog(int id) + { + var log = _db.Logs.Find(id); + _db.Logs.Remove(log); + _db.SaveChanges(); + + UpdateCurrentOdometer(log.VehicleId); + } + + public IEnumerable GetRecentLogsByEmployee(string employeeName) + { + return + (from l in _db.Logs + where l.EmployeeName == employeeName + orderby l.Created descending + select l) + .Take(3) + .ToList(); + } + + #endregion + + #region Vehicle + + public void AddVehicle(Vehicle vehicle) + { + if (vehicle.Assigned == "Unassigned") + vehicle.Assigned = null; + _db.Vehicles.Add(vehicle); + _db.SaveChanges(); + } + + public IEnumerable GetVehicles() + { + var vehicles = _db.Vehicles; + return vehicles; + } + + public Vehicle GetVehicle(string id) + { + return _db.Vehicles.Find(id); + } + + public void UpdateVehicle(Vehicle vehicle) + { + if (vehicle.Assigned == "Unassigned") + vehicle.Assigned = null; + _db.Entry(vehicle).State = EntityState.Modified; + _db.SaveChanges(); + } + + public void UpdateCurrentOdometer(string vehicleId) + { + var mostRecentOdometerQuery = + from log in _db.Logs + where + log.VehicleId == vehicleId + orderby log.Date descending, log.EndOdometer descending + select log; + var mostRecentOdometer = mostRecentOdometerQuery.FirstOrDefault(); + var vehicle = _db.Vehicles.Find(vehicleId); + if (mostRecentOdometer != null && mostRecentOdometer.EndOdometer != vehicle.CurrentOdometer) + { + vehicle.CurrentOdometer = mostRecentOdometer.EndOdometer; + UpdateVehicle(vehicle); + } + } + + public void ValidateOdometerChronology(string vehicleId, int odometer, DateTime date) + { + var conflictingLog = GetFirstConflictingOdometerChronologyLog(vehicleId, date, odometer); + if (conflictingLog != null) + { + throw new ChronologicalOrderException( + String.Format( + "Odometer of {0} miles on {1:d} conflicts with other logs for vehicle {2}" + + ", including an odometer log of {3} miles on {4:d} reported by {5}.", + odometer, date, vehicleId, conflictingLog.EndOdometer, conflictingLog.Date, conflictingLog.EmployeeName)); + } + } + + public Log GetFirstConflictingOdometerChronologyLog(string vehicleId, DateTime date, int odometer) + { + // TODO HACK for testing, delete later + try + { + if (_db.Logs.Count() == 0) + return null; + } + catch (NullReferenceException) + { + return null; + } + + var conflictingLogsQuery = + from log in _db.Logs + let existingDate = log.Date + let existingOdometer = log.EndOdometer + where + log.VehicleId == vehicleId && + !(existingDate == date + || existingOdometer == odometer + || existingDate < date && existingOdometer < odometer + || existingDate > date && existingOdometer > odometer) + orderby existingOdometer descending + select log; + + return conflictingLogsQuery.FirstOrDefault(); + } + + #endregion + + #region Employee Name + + public string GetEmployeeNameCorrected(string term) + { + var names = GetEmployeeNames().ToList(); + return (from potentialName in names + let potentialNameClean = Regex.Replace(potentialName, @"\s*\(.*\)", "").ToLower() + let name = term.ToLower() + let similarity = Algorithms.Similarity(potentialNameClean, name) + where similarity > .7 || potentialNameClean.StartsWith(name) + orderby similarity descending + select potentialName).FirstOrDefault(); + } + + public IEnumerable GetEmployeeNamesAutocomplete(string term) + { + var termLower = term.ToLower(); + return from name in GetEmployeeNames() + let nameLower = name.ToLower() + where nameLower.StartsWith(termLower) || Algorithms.Similarity(nameLower, termLower) > .8 + select name; + } + + public IEnumerable GetEmployeeNames() + { + var names = _db.Vehicles.Select(v => v.Assigned).Where(n => !String.IsNullOrEmpty(n) && n != "to be sold"); + var logNames = + (from l in _db.Logs + select l.EmployeeName); + return names.Union(logNames).Distinct(); + } + + #endregion + + #region City + + public string GetCitiesCorrected(string term) + { + var termLower = term.ToLower(); + return (from city in GetCities().ToList() + let cityToLower = city.Name.ToLower() + let similarity = Algorithms.Similarity(cityToLower, termLower) + where city.Name.StartsWith(term) || Algorithms.Similarity(cityToLower, termLower) > .8 + select city.Name).FirstOrDefault(); + } + + public IEnumerable GetCitiesAutocomplete(string term) + { + return + from city in GetCities() + where city.Name.StartsWith(term) + select city.Name; + } + + private IQueryable GetCities() + { + return _db.Cities; + } + + #endregion + + public void Dispose() + { + _db.Dispose(); + } + } +} \ No newline at end of file diff --git a/Web/DAL/MileageTrakerInitializer.cs b/Web/DAL/MileageTrakerInitializer.cs new file mode 100644 index 0000000..f2065e7 --- /dev/null +++ b/Web/DAL/MileageTrakerInitializer.cs @@ -0,0 +1,97 @@ +using System; +using System.Data.Entity; +using System.IO; +using System.Linq; +using System.Web; +using MileageTraker.Web.Models; + +namespace MileageTraker.Web.DAL +{ + public class MileageTrakerInitializer : +#if DEBUG + DropCreateDatabaseIfModelChanges +#else + CreateDatabaseIfNotExists +#endif + { + private const string CreateIndex = "CREATE NONCLUSTERED INDEX [IDX_{1}] ON [{0}] ([{1}])"; + + protected override void Seed(MileageTrakerContext context) + { + Action createIndex = + (table, column) => context.Database.ExecuteSqlCommand(string.Format(CreateIndex, table, column)); + + createIndex("Log", "VehicleId"); + createIndex("Log", "EndOdometer"); + //createIndex("Log", "EmployeeName"); + //createIndex("Log", "CityName"); + createIndex("Log", "Date"); + createIndex("Log", "Created"); + //createIndex("Vehicle", "Assigned"); + + var folder = HttpContext.Current.Server.MapPath("~/App_Data"); + var vehicles = VehicleImporter.Import(Path.Combine(folder, "2011ETHRAvehicles.xls")); + foreach (var vehicle in vehicles) + { + context.Vehicles.Add(vehicle); + } + + var cities = VehicleImporter.ImportCities(Path.Combine(folder, "Cities.xls")); + foreach (var city in cities) + { + context.Cities.Add(city); + } + + var random = new Random(10); + foreach (var vehicle in vehicles.Where(v => v.Assigned != null)) + { + var odom = 1000 + random.Next(20000); + var purDateSplit = vehicle.PurDate.Split('/'); + var date = new DateTime(int.Parse("20" + purDateSplit[1]), int.Parse(purDateSplit[0]), 1); + var commonLogType = random.Next(1)%2 == 0 ? MileageLogType.NonCommuting : MileageLogType.Commuting; + var commonCity = cities.OrderBy(c => Guid.NewGuid()).First(); + + while (date < DateTime.Today) + { + var gas = random.Next(4)%4 == 0 ? Math.Round(random.NextDouble()*15, 3) : 0; + + var logType = commonLogType; + if (gas > 0 && random.Next(3) % 3 == 0) + logType = MileageLogType.GasPurchase; + else if (random.Next(6) % 6 == 0) + logType = commonLogType == MileageLogType.NonCommuting ? MileageLogType.Commuting : MileageLogType.NonCommuting; + + var driver = vehicle.Assigned; + if (random.Next(10)%10 == 0) + driver = vehicles.Where(v => v.Assigned != null).OrderBy(x => Guid.NewGuid()).First().Assigned; + + var city = commonCity; + if (random.Next(10)%10 == 0) + city = cities.OrderBy(c => Guid.NewGuid()).First(); + + var log = new Log + { + CityName = city.Name, + Date = date, + EmployeeName = driver, + EndOdometer = odom, + GasPurchased = gas, + LogType = logType, + VehicleId = vehicle.VehicleId, + Source = "Autogenerated", + UserAgent = "IE", + UserHostAddress = "127.0.0.1", + Created = date + }; + context.Logs.Add(log); + + date += new TimeSpan(random.Next(15), 0, 0, 0); + if (random.Next(10) % 10 == 0) + date += new TimeSpan(random.Next(360) + 90, 0, 0, 0); + odom += random.Next(25) + 25; + } + } + context.SaveChanges(); + } + } +} \ No newline at end of file diff --git a/Web/DAL/VehicleImporter.cs b/Web/DAL/VehicleImporter.cs new file mode 100644 index 0000000..78d03e2 --- /dev/null +++ b/Web/DAL/VehicleImporter.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using ExcelLibrary.SpreadSheet; +using MileageTraker.Web.Models; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web.DAL +{ + public static class VehicleImporter + { + private const string WorksheetName = "Vehicles"; + private const string WorksheetTitle = "EAST TENNESSEE HUMAN RESOURCE AGENCY"; + + public static void Export(IEnumerable vehicles, string filename) + { + ExcelWriter.WriteXls(vehicles, filename, WorksheetTitle, WorksheetName); + } + + public static void Export(IEnumerable vehicles, Stream stream) + { + ExcelWriter.WriteXls(vehicles, stream, WorksheetTitle, WorksheetName); + } + + public static byte[] Export(IEnumerable vehicles) + { + return ExcelWriter.WriteXls(vehicles, WorksheetTitle, WorksheetName); + } + + public static IEnumerable ImportCities(string filename) + { + var fileInfo = new FileInfo(filename); + return ImportCities(Workbook.Load(fileInfo.FullName)); + } + + private static IEnumerable ImportCities(Workbook workbook) + { + var sheet = workbook.Worksheets[0]; + + for (var r = sheet.Cells.FirstRowIndex + 1; r <= sheet.Cells.LastRowIndex; r++) + { + var row = sheet.Cells.GetRow(r); + + var city = new City + { + County = row.GetCell(0).StringValue.Trim(), + Name = row.GetCell(1).StringValue.Trim() + }; + + yield return city; + } + } + + public static IEnumerable Import(string filename) + { + var fileInfo = new FileInfo(filename); + return Import(Workbook.Load(fileInfo.FullName)); + } + + private static IEnumerable Import(Workbook workbook) + { + var sheet = workbook.Worksheets[0]; + var first = true; + for (var r = sheet.Cells.FirstRowIndex; r <= sheet.Cells.LastRowIndex; r++) + { + var row = sheet.Cells.GetRow(r); + if (row.LastColIndex != 11) + continue; + if (first) + { + first = false; + continue; + } + + var vehicle = new Vehicle(); + int key; + if (!int.TryParse(row.GetCell(0).StringValue.Trim(), out key)) + continue; // WARN + + vehicle.Key = key; + vehicle.VehicleId = row.GetCell(1).StringValue.Trim(); + vehicle.ModelYear = row.GetCell(2).StringValue.Trim(); + + var makeModel = row.GetCell(3).StringValue.Trim(); + const string pattern = @"(\w+)\s+(.+)"; + var make = Regex.Replace(makeModel, pattern, "$1"); + var model = Regex.Replace(makeModel, pattern, "$2"); + vehicle.Make = make; + vehicle.CarModel = model; + + vehicle.Color = row.GetCell(4).StringValue.Trim(); + if (vehicle.Color == "0") + vehicle.Color = "Unknown"; + vehicle.Type = row.GetCell(5).StringValue.Trim(); + vehicle.Vin = row.GetCell(6).StringValue.Trim().Replace('O','0').Substring(0,17); + vehicle.Price = decimal.Parse(row.GetCell(7).StringValue.Trim()); + vehicle.PurDate = row.GetCell(8).StringValue.Trim(); + vehicle.TagNumber = row.GetCell(9).StringValue.Trim(); + vehicle.Prog = row.GetCell(10).StringValue.Trim(); + vehicle.Assigned = row.GetCell(11).StringValue.Trim(); + vehicle.Assigned = Regex.Replace(vehicle.Assigned, @"(\w+),\s*(\w+)", "$2 $1"); + var match = Regex.Match(vehicle.Assigned, @"\s*\((?.*)\)\s*"); + if (match.Success) + { + vehicle.Notes = match.Groups["Notes"].Value; + vehicle.Assigned = Regex.Replace(vehicle.Assigned, @"\s*\(.*\)\s*", " ").Trim(); + } + if (vehicle.Assigned == "Unassigned") + vehicle.Assigned = null; + + yield return vehicle; + } + } + } +} \ No newline at end of file diff --git a/Web/Global.asax b/Web/Global.asax new file mode 100644 index 0000000..fc93055 --- /dev/null +++ b/Web/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="MileageTraker.Web.MvcApplication" Language="C#" %> diff --git a/Web/Global.asax.cs b/Web/Global.asax.cs new file mode 100644 index 0000000..0b76488 --- /dev/null +++ b/Web/Global.asax.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Data.Entity; +using System.Linq; +using System.Web.Mvc; +using System.Web.Routing; +using AutoMapper; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web +{ + public class MvcApplication : System.Web.HttpApplication + { + public static void RegisterGlobalFilters(GlobalFilterCollection filters) + { + filters.Add(new HandleErrorAttribute()); + } + + public static void RegisterRoutes(RouteCollection routes) + { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + //routes.MapRoute( + // "Export Vehicles", + // "ETHRAVehicles{year}-{month}-{day}.xls", + // new { controller = "Vehicle", action = "Export" } + // ); + + routes.MapRoute( + "Default", // Route name + "{controller}/{action}/{id}", // URL with parameters + new { controller = "CreateLog", action = "Index", id = UrlParameter.Optional } // Parameter defaults + ); + } + + protected void Application_Start() + { + Mapper.CreateMap().ConvertUsing(new DateTimeTypeConverter()); + + AreaRegistration.RegisterAllAreas(); + + RegisterGlobalFilters(GlobalFilters.Filters); + RegisterRoutes(RouteTable.Routes); + + Database.SetInitializer(new MileageTrakerInitializer()); + + ModelMetadataProviders.Current = new CustomMetadataProvider(); + } + } + + public class CustomMetadataProvider : DataAnnotationsModelMetadataProvider + { + protected override ModelMetadata CreateMetadata(IEnumerable attributes, Type containerType, Func modelAccessor, Type modelType, string propertyName) + { + var metadata = base.CreateMetadata(attributes, containerType, modelAccessor, modelType, propertyName); + + if (propertyName == null) + return metadata; + + if (metadata.DisplayName == null) + metadata.DisplayName = propertyName.Wordify(); + + var formatHint = attributes.OfType().FirstOrDefault(); + metadata.AdditionalValues.Add("FormatHint", formatHint != null ? formatHint.Text : (string)null); + + var unitsAttribute = attributes.OfType().FirstOrDefault(); + metadata.AdditionalValues.Add("Units", unitsAttribute != null ? unitsAttribute.Text : (string)null); + + var editLabelAttribute = attributes.OfType().FirstOrDefault(); + metadata.AdditionalValues.Add("EditLabel", editLabelAttribute == null); + + return metadata; + } + } +} \ No newline at end of file diff --git a/Web/Logs/MileageTraker.log b/Web/Logs/MileageTraker.log new file mode 100644 index 0000000..cdbfb99 --- /dev/null +++ b/Web/Logs/MileageTraker.log @@ -0,0 +1,35 @@ +2012-12-01 08:55:00,035 [5] ERROR LogController.Index - +System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The SELECT permission was denied on the object 'Log', database 'MileageTraker', schema 'dbo'. + at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() + at System.Data.SqlClient.SqlDataReader.get_MetaData() + at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) + at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) + at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) + at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) + at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + --- End of inner exception stack trace --- + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) + at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) + at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) + at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.1 b/Web/Logs/MileageTraker.log.1 new file mode 100644 index 0000000..970ed40 --- /dev/null +++ b/Web/Logs/MileageTraker.log.1 @@ -0,0 +1,35 @@ +2012-12-01 08:54:10,587 [5] ERROR LogController.Index - +System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: The SELECT permission was denied on the object 'Log', database 'MileageTraker', schema 'dbo'. + at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() + at System.Data.SqlClient.SqlDataReader.get_MetaData() + at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) + at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) + at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) + at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) + at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) + at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + --- End of inner exception stack trace --- + at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) + at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) + at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) + at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator() + at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) + at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2011-09-03 b/Web/Logs/MileageTraker.log.2011-09-03 new file mode 100644 index 0000000..01fa0c9 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2011-09-03 @@ -0,0 +1,5 @@ +2011-09-03 12:11:02,978 [8] INFO LogController.Create - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:12:00,729 [4] INFO LogController.Create - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:12:33,668 [14] INFO LogController.Create - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:13:44,736 [14] INFO LogController.Edit - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log +2011-09-03 12:14:11,073 [16] INFO LogController.Edit - UserHostAddress: 127.0.0.1, log: MileageTraker.Web.Models.Log diff --git a/Web/Logs/MileageTraker.log.2011-09-12 b/Web/Logs/MileageTraker.log.2011-09-12 new file mode 100644 index 0000000..912346b --- /dev/null +++ b/Web/Logs/MileageTraker.log.2011-09-12 @@ -0,0 +1,60 @@ +2011-09-12 19:45:10,275 [22] ERROR CreateLogController.Index - +System.Web.HttpParseException (0x80004005): The using block is missing a closing "}" character. Make sure you have a matching "}" character for all the "{" characters within this block, and that none of the "}" characters are being interpreted as markup. + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2011-09-12 19:49:04,301 [23] ERROR CreateLogController.Index - +System.Web.HttpParseException (0x80004005): Unexpected "if" keyword after "@" character. Once inside code, you do not need to prefix constructs like "if" with "@". + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2011-09-12 19:50:23,506 [27] INFO CreateLogController.Action - UserHostAddress: 127.0.0.1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2011-09-12 19:51:41,962 [24] INFO CreateLogController.Action - UserHostAddress: 127.0.0.1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2011-09-12.1 b/Web/Logs/MileageTraker.log.2011-09-12.1 new file mode 100644 index 0000000..3f6be31 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2011-09-12.1 @@ -0,0 +1 @@ +2011-09-12 19:37:02,942 [7] INFO CreateLogController.Action - UserHostAddress: 127.0.0.1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-04-18 b/Web/Logs/MileageTraker.log.2012-04-18 new file mode 100644 index 0000000..a0f29a5 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18 @@ -0,0 +1,22 @@ +2012-04-18 15:34:45,582 [48] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 15:35:52,818 [48] ERROR CreateLogController.Confirm - +System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. + at System.Data.Entity.Internal.InternalContext.SaveChanges() + at System.Data.Entity.Internal.LazyInternalContext.SaveChanges() + at System.Data.Entity.DbContext.SaveChanges() + at MileageTraker.Web.DAL.DataService.AddLog(Log log) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 23 + at MileageTraker.Web.Controllers.CreateLogController.Confirm(CreateLogViewModel model) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\CreateLogController.cs:line 63 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2012-04-18 15:36:40,307 [44] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 15:36:50,346 [44] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 15:36:52,150 [52] INFO CreateLogController.Confirm - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-04-18.1 b/Web/Logs/MileageTraker.log.2012-04-18.1 new file mode 100644 index 0000000..3089f61 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18.1 @@ -0,0 +1,3 @@ +2012-04-18 14:52:27,891 [13] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-04-18 14:58:39,371 [21] INFO LogController.Export - UserHostAddress: ::1, query: MileageTraker.Web.ViewModels.LogQueryViewModel +2012-04-18 15:03:20,162 [28] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-04-18.2 b/Web/Logs/MileageTraker.log.2012-04-18.2 new file mode 100644 index 0000000..8bd88e8 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18.2 @@ -0,0 +1,28 @@ +2012-04-18 14:41:39,305 [10] ERROR LogController.Index - +System.InvalidOperationException: The model backing the 'MileageTrakerContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). + at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) + at System.Data.Entity.Database.<>c__DisplayClass2`1.b__0(DbContext c) + at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.b__6() + at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) + at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) + at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 19 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-04-18.3 b/Web/Logs/MileageTraker.log.2012-04-18.3 new file mode 100644 index 0000000..a8c86bd --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-18.3 @@ -0,0 +1,56 @@ +2012-04-18 14:16:06,542 [6] ERROR LogController.Index - +System.InvalidOperationException: The model backing the 'MileageTrakerContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). + at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) + at System.Data.Entity.Database.<>c__DisplayClass2`1.b__0(DbContext c) + at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.b__6() + at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) + at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) + at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 19 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2012-04-18 14:30:43,757 [5] ERROR LogController.Index - +System.InvalidOperationException: The model backing the 'MileageTrakerContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269). + at System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) + at System.Data.Entity.Database.<>c__DisplayClass2`1.b__0(DbContext c) + at System.Data.Entity.Internal.InternalContext.<>c__DisplayClass8.b__6() + at System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) + at System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() + at System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c) + at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) + at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in C:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 19 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-04-23 b/Web/Logs/MileageTraker.log.2012-04-23 new file mode 100644 index 0000000..48720ae --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-04-23 @@ -0,0 +1,56 @@ +2012-04-23 20:15:29,669 [35] ERROR CreateLogController.RecentLogs - +System.Web.HttpParseException (0x80004005): Only one 'model' statement is allowed in a file. + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +2012-04-23 20:15:38,680 [35] ERROR CreateLogController.RecentLogs - +System.Web.HttpParseException (0x80004005): Only one 'model' statement is allowed in a file. + + at System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() + at System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() + at System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) + at System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() + at System.Web.Compilation.BuildProvidersCompiler.PerformBuild() + at System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) + at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) + at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) + at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) + at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) + at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) + at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.b__b(IViewEngine e) + at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) + at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) + at System.Web.Mvc.ViewResult.FindView(ControllerContext context) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-05-26 b/Web/Logs/MileageTraker.log.2012-05-26 new file mode 100644 index 0000000..ef688c3 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-05-26 @@ -0,0 +1 @@ +2012-05-26 13:50:31,388 [21] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-06-12 b/Web/Logs/MileageTraker.log.2012-06-12 new file mode 100644 index 0000000..e0ea88a --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-06-12 @@ -0,0 +1,31 @@ +2012-06-12 19:18:40,050 [10] ERROR LogController.MonthlyVehicleMileage - +System.NullReferenceException: Object reference not set to an instance of an object. + at ASP._Page_Views_Log_LogsSummary_cshtml.b__0(Tuple`2 log) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Views\Log\LogsSummary.cshtml:line 43 + at System.Linq.Enumerable.<>c__DisplayClass12`3.b__11(TSource x) + at System.Linq.Enumerable.WhereSelectListIterator`2.MoveNext() + at System.Linq.Enumerable.Sum(IEnumerable`1 source) + at System.Linq.Enumerable.Sum[TSource](IEnumerable`1 source, Func`2 selector) + at ASP._Page_Views_Log_LogsSummary_cshtml.Execute() in c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\05d80320\b40ebf6d\App_Web_yqhuw3pv.0.cs:line 0 + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() + at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) + at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) + at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) + at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection) + at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData) + at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model) + at ASP._Page_Views_Log_MonthlyVehicleMileage_cshtml.Execute() in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Views\Log\MonthlyVehicleMileage.cshtml:line 47 + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() + at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() + at System.Web.WebPages.StartPage.RunPage() + at System.Web.WebPages.StartPage.ExecutePageHierarchy() + at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) + at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) + at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) + at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.b__19() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<>c__DisplayClass1e.b__1b() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-06-12.1 b/Web/Logs/MileageTraker.log.2012-06-12.1 new file mode 100644 index 0000000..58f1608 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-06-12.1 @@ -0,0 +1,2 @@ +2012-06-12 18:13:44,281 [15] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel +2012-06-12 18:15:08,190 [24] INFO CreateLogController.Action - UserHostAddress: ::1, model: MileageTraker.Web.ViewModels.CreateLogViewModel diff --git a/Web/Logs/MileageTraker.log.2012-11-27 b/Web/Logs/MileageTraker.log.2012-11-27 new file mode 100644 index 0000000..aa80d93 --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-11-27 @@ -0,0 +1,52 @@ +2012-11-27 12:41:28,332 [5] ERROR LogController.Index - +System.Data.ProviderIncompatibleException: An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct. ---> System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException: Login failed for user 'MileageTrakerUser'. + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) + at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) + at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) + at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) + at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) + at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) + at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) + at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) + at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) + at System.Data.SqlClient.SqlConnection.Open() + at System.Data.SqlClient.SqlProviderServices.UsingConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection) + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) + at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) + at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) + at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in c:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Logs/MileageTraker.log.2012-11-27.1 b/Web/Logs/MileageTraker.log.2012-11-27.1 new file mode 100644 index 0000000..a43149a --- /dev/null +++ b/Web/Logs/MileageTraker.log.2012-11-27.1 @@ -0,0 +1,51 @@ +2012-11-27 12:40:34,412 [5] ERROR LogController.Index - +System.Data.ProviderIncompatibleException: An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct. ---> System.Data.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string. ---> System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server) ---> System.ComponentModel.Win32Exception: The network path was not found + --- End of inner exception stack trace --- + at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) + at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) + at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover) + at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) + at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) + at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) + at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions) + at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnectionOptions userOptions) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) + at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) + at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) + at System.Data.SqlClient.SqlConnection.Open() + at System.Data.SqlClient.SqlProviderServices.UsingConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.UsingMasterConnection(SqlConnection sqlConnection, Action`1 act) + at System.Data.SqlClient.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection) + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + --- End of inner exception stack trace --- + at System.Data.Entity.ModelConfiguration.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection) + at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest) + at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) + at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) + at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) + at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() + at System.Data.Entity.Internal.InternalContext.Initialize() + at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) + at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() + at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() + at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() + at System.Linq.Queryable.GroupBy[TSource,TKey](IQueryable`1 source, Expression`1 keySelector) + at MileageTraker.Web.DAL.DataService.GetValidLogYears() in c:\Users\poprhythm\Documents\code\MileageTraker\Web\DAL\DataService.cs:line 40 + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in c:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 20 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Migrations/201204181847082_InitialMigration.Designer.cs b/Web/Migrations/201204181847082_InitialMigration.Designer.cs new file mode 100644 index 0000000..fdcf919 --- /dev/null +++ b/Web/Migrations/201204181847082_InitialMigration.Designer.cs @@ -0,0 +1,24 @@ +// +namespace MileageTraker.Web.Migrations +{ + using System.Data.Entity.Migrations; + using System.Data.Entity.Migrations.Infrastructure; + + public sealed partial class InitialMigration : IMigrationMetadata + { + string IMigrationMetadata.Id + { + get { return "201204181847082_InitialMigration"; } + } + + string IMigrationMetadata.Source + { + get { return null; } + } + + string IMigrationMetadata.Target + { + get { return "H4sIAAAAAAAEAOy9B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+g3Th6fzhbv0p807fbQjt5cNp99NG/b1aO7d5vpPF9kzXhRTOuqqc7b8bRa3M1m1d29nZ2Du7s7d3MC8RHBStPHr9bLtljk/Af9eVItp/mqXWflF9UsLxv9nL55zVDTF9kib1bZNP/soy+KMs8u8jd19javx9/NJ2N556P0uCwywud1Xp6/J3I7D4HcR7ZbRmmxKvN3b65XOfduO35eXeDD79bZapXX/jv01su6og/ba33lJ7NynX+Uov1nH50t23t7H6Uv1mWZTUr64DwrG/r2rt/tXa9f//NTold77WFDaHT6/r3y6+ADD51X+bl77WwW9oleu+92B6KvbR7I6tNHr9uqzj/Pl3mdtfnsZda2eU3scjbLGX+dlkerT283Mw/v7uxhZu5my2XVZi3xXg/3LsnzeTEtc4ft67YmXv4ofVa8y2fP8+VFO7cYf5G9M598+lH61bIgxqdX2hqztnGi+h2fLmdfzqpFTiN+nxmP0hqvW/yJncdx3ntfyCc0BfjtfUmz/8G0IZ6urvP8a3ROv35o759nzct1PZ1nTW654mm1JgDvDeopsbUFQb+/KTCg9wRyUueQjg+G87qiUX2z9JS/N3f7VZPX366a9ng2q/Om+Tnp//iCFMrPcs+P7zqlu1EVq8r5OurY01bvq5J/zhQdIfZhCo7t9e+TZ1ZP3hLzb0AVfEFOww+/15Os5jH/HPRcldU3S+bbSGhgvr6JTm811p8slj/8Tl/WhVPBT/Npschoml/W9Jt61Acfpa+nGQC+v6SQ2fItzg9vWG+yixfrxcS5Mj+8runPix9+r8dNU1wsnVH+Rnq+jay8qNr8h29DT9Z1TRb0Roc1CutFdllcsDPe91xpKK/ykr9s5sVK3Ve1Vb+/NHhWV4tXFcD7n//+1p2pIl++yeqLvP2aBhp+79exznjv65hm895mI/n/inDpG/fIb8V9FYX/1on4Wep2iDtI0qtpwcQJPSnhzhBxCurSTawqA/BYnFBel22xKosp9U3qPwRIIL9cPs1LErr0eNqyhTjJmmk26xON8J/dChsjGx42yA50MPlWrwNi9BxaoMhKSsA0bZ0Vy7YvFcVyWqyycgMdOu9EZWnQ08VIbSfdb57mq3wJadgw7g/u3XbSof9N9Hl81+OlvgKid1p6I6+N7+knrvBl/q6DvL74Om8Dher42J/dzmR2X9URx163rHoDCFJjRRQA69Pu2x4telio4veaxAxDd2JuED6Lrj/Y3uzeIDMeEMGxK4ThsCL6xU6z/e7xXcla6gfI6UXTm4+/oDQOqT4v3amfpK8l13my/fr9M5kLgXF3GlC0y5S2JzJBxJWdb6GjZ/mzom5ackCzSQZlfDJb9Jq9D1ObLj3e7s+WYTXTGL9H5MdL/LI49JWAAnhGo1tAgbCtDae7/1aKjHNWZnXfs4HuoHBqvVgGH3UZbhiGp4N8OBtU0zCsINnoQwu+iMLTBPPLuuoM0EVtN9D7Fonwzdj/ZMZp8Q41Aez316+imJvcuIF2a2q5vKffpfv0PegeJDIDwgff3B5imJz0IYbf3B6iRIw+JPnk9hBsgjIgl/nw9nCMpvbBmM9uD6WXb/TB9b58P7iaR+xC1I/7sB7f7aiVrgLznE5t2bEnXW14K11p7ds3oi+j+UoGd5POHHzzh6HzOO/oQ+EPbv8+j17Sjj4U7+P3gMV5xAAMf3J7CC4nGAiZ/fQ9IEmOLwAjH90ehuh+H4R8cnsInH0L5rjoBZ+b3tdEmg9BP3oPGCZdFkAxH94ejpf9CkjiPr49rJeczgqH1XffN0FwqSkfivv09pA012TBuI9uD6OXOQr4rvvl/2s0qMYy34j+7KeTGNZNyjP+2iCdC8khdT2W99OZ+Lcz4dn7+ScmVxOqF/nshzy7vYir28T2rp/Yv23EpdGOTKR7T+I1HnGjkVc3/JEmSO1Xl8UMoc/r66bNF2M0GL/+ReVJWbDTYBp8kS2L87xp31Rvcwp3EZ1RBFwWWSOx73sFdjaz1zSzMhLWecnOXlxzu1xnNJy5OdWpr0lyoMD4b8xpvmdmvrfOubzM4BXX3VXN94QbREoe/u8JphO4fH1ALhzZNMz994YbBiYh7K1F9u7Oe0MMAxOBeF5W2fuP2V/cmtHvbQEc3xOIDUw+EE6Y1B0k0W0S3L2o5BuCqXHJe0O79UpJ1MG/nQIZ9OlvViI/WyLOAcLXl0gvMvgmxEYihG8CkosSvhFoEiy8N1P1IUnM8E3g5K3lfxigYH1+9rO8Pv9hqPbW3D8M3EtvHf3DIHXXxj+IR4L17g+CNLCG3ZH0D1CGP7fLxj8rztStnIBbET9Ywn0PUD87y7LB4ucPdyn2uROzH87S64cveArgWyy3xldW3rM3C7RD0294ebW/YNWdMQ0stT3Pk+NFf/Yk1iN7MaloaoWT32PNddOSawz0e6zHXg+uxsYA/1yt08bWZiOc0ZEh750Ysb+Rldh+/E98SJqsWIgyIglgW2dA0GrZcplPAw60bc6W55WRhQ5GpknXBczbjOKT7Lhui/Ns2tLXU4oPKEPxUcoBJMK1ST47W365blfrloacLyZlMIkQqE3983JziPPjL1f4y0t4fP0hEJoFQqwvl0/WRTmzeD/rm58hEJBUtWmYyxa27eLaQnpRLW8JSMn31CiYNznFugSs+XL5OrvMh3G7mYYhxR4/LbKLOlv4FJRPFJPXGVYmXRfUgf+G64/+JHadLd4d/T8BAAD///ffkxB9NQAA"; } + } + } +} diff --git a/Web/Migrations/201204181847082_InitialMigration.cs b/Web/Migrations/201204181847082_InitialMigration.cs new file mode 100644 index 0000000..6e55f69 --- /dev/null +++ b/Web/Migrations/201204181847082_InitialMigration.cs @@ -0,0 +1,17 @@ +namespace MileageTraker.Web.Migrations +{ + using System.Data.Entity.Migrations; + + public partial class InitialMigration : DbMigration + { + public override void Up() + { + } + + public override void Down() + { + } + } +} + +// Update-Database -Script -SourceMigration:$InitialDatabase -TargetMigration:"InitialMigration" \ No newline at end of file diff --git a/Web/Migrations/Configuration.cs b/Web/Migrations/Configuration.cs new file mode 100644 index 0000000..bc9323b --- /dev/null +++ b/Web/Migrations/Configuration.cs @@ -0,0 +1,31 @@ +namespace MileageTraker.Web.Migrations +{ + using System; + using System.Data.Entity; + using System.Data.Entity.Migrations; + using System.Linq; + + internal sealed class Configuration : DbMigrationsConfiguration + { + public Configuration() + { + AutomaticMigrationsEnabled = true; + } + + protected override void Seed(MileageTraker.Web.Models.MileageTrakerContext context) + { + // This method will be called after migrating to the latest version. + + // You can use the DbSet.AddOrUpdate() helper extension method + // to avoid creating duplicate seed data. E.g. + // + // context.People.AddOrUpdate( + // p => p.FullName, + // new Person { FullName = "Andrew Peters" }, + // new Person { FullName = "Brice Lambson" }, + // new Person { FullName = "Rowan Miller" } + // ); + // + } + } +} diff --git a/Web/MileageTraker.log b/Web/MileageTraker.log new file mode 100644 index 0000000..e8329eb --- /dev/null +++ b/Web/MileageTraker.log @@ -0,0 +1,12 @@ +2011-06-14 14:05:44,378 [16] ERROR Index - +System.Exception: test + at MileageTraker.Web.Controllers.LogController.Index(LogQueryViewModel query) in C:\Users\poprhythm\Documents\code\MileageTraker\Web\Controllers\LogController.cs:line 17 + at lambda_method(Closure , ControllerBase , Object[] ) + at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) + at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.b__12() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) + at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() + at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters) + at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) diff --git a/Web/Models/City.cs b/Web/Models/City.cs new file mode 100644 index 0000000..a54810c --- /dev/null +++ b/Web/Models/City.cs @@ -0,0 +1,12 @@ +using System.ComponentModel.DataAnnotations; + +namespace MileageTraker.Web.Models +{ + public class City + { + [Key] + public int CityId { get; set; } + public string Name { get; set; } + public string County { get; set; } + } +} \ No newline at end of file diff --git a/Web/Models/Log.cs b/Web/Models/Log.cs new file mode 100644 index 0000000..3412fed --- /dev/null +++ b/Web/Models/Log.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; +using MileageTraker.Web.DAL; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web.Models +{ + public class Log : IValidatableObject + { + [Key] + [HiddenInput(DisplayValue = false)] + public int LogId { get; set; } + + [Required] + [Remote("Exists", "Vehicle", ErrorMessage = "ID not found")] + [StringLength(6, MinimumLength = 4, ErrorMessage = "Enter 4 digit number")] + [Display(Name = "Vehicle ID")] + [RegularExpression(@"\d+", ErrorMessage = "Enter only numbers")] + public string VehicleId { get; set; } + + [Required] + [Range(1, 500000, ErrorMessage = "Between 1 and 500k")] + [Display(Name = "End Odometer")] + [Units("Miles")] + public int EndOdometer { get; set; } + + [Required] + [Display(Name = "Type")] + [NoEditLabel] + public MileageLogTypeWrapper LogType { get; set; } + + [Required] + [StringLength(64, MinimumLength = 3, ErrorMessage = "Minimum 3 characters")] + public string CityName { get; set; } + + [Required] + [Display(Name = "Employee / Driver")] + [RegularExpression(@"[A-Za-z().]+(\s+[A-Za-z().]+)+", ErrorMessage = "Need complete name")] + public string EmployeeName { get; set; } + + [Range(0, 50)] + [DisplayFormat(DataFormatString = "{0:0.000}", ApplyFormatInEditMode = true)] + [Units("Gallons")] + [FormatHint("n.nnnn")] + public double GasPurchased { get; set; } + + [Required] + [DataType(DataType.Date)] + [DisplayFormat(DataFormatString = @"{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] + [DenyFutureDate(ErrorMessage = "Future date")] + [FormatHint("mm/dd/yyyy")] + public DateTime Date { get; set; } + + [Display(Name = "Time Created")] + [DisplayFormat(DataFormatString = @"{0:MM/dd/yyyy h:mm tt}")] + [HiddenInput] + public DateTime Created { get; set; } + + /// + /// url route that was used to create this instance, ie 'CreateLog\Confirm' or 'Logs\Create' + /// + [HiddenInput] + public string Source { get; set; } + + [HiddenInput] + public string UserHostAddress { get; set; } + + [HiddenInput] + public string UserAgent { get; set; } + + public Log() + { + LogType = new MileageLogTypeWrapper(); + } + + public IEnumerable Validate(ValidationContext validationContext) + { + if (LogType == MileageLogType.GasPurchase && (GasPurchased.Equals(0))) + yield return new ValidationResult("Enter amount of gas purchased", new[] { "GasPurchased" }); + + if (LogType.Value == 0) + yield return new ValidationResult("Required", new[] { "LogType" }); + + ValidationResult result = null; + try + { + var dataService = new DataService(); + dataService.ValidateOdometerChronology(VehicleId, EndOdometer, Date); + } + catch (ChronologicalOrderException ex) + { + result = new ValidationResult(ex.Message, new[] { "EndOdometer" }); + } + if (result != null) + yield return result; + } + } +} \ No newline at end of file diff --git a/Web/Models/MileageLogType.cs b/Web/Models/MileageLogType.cs new file mode 100644 index 0000000..3b12c85 --- /dev/null +++ b/Web/Models/MileageLogType.cs @@ -0,0 +1,37 @@ +using System.ComponentModel.DataAnnotations; + +namespace MileageTraker.Web.Models +{ + public enum MileageLogType + { + [Display(Name = "Non-Commuting",ShortName = "Non-Comm")] + NonCommuting = 1, + [Display(Name = "Commuting", ShortName = "Comm")] + Commuting = 2, + [Display(Name = "Gas Purchase", ShortName = "Gas")] + GasPurchase = 3 + } + + [ComplexType] + public class MileageLogTypeWrapper + { + [NotMapped] + public MileageLogType Enum { get; set; } + + public int Value + { + get { return (int)Enum; } + set { Enum = (MileageLogType)value; } + } + + public static implicit operator MileageLogType(MileageLogTypeWrapper w) + { + return w == null ? default(MileageLogType) : w.Enum; + } + + public static implicit operator MileageLogTypeWrapper(MileageLogType c) + { + return new MileageLogTypeWrapper { Enum = c }; + } + } +} \ No newline at end of file diff --git a/Web/Models/MileageTrakerContext.cs b/Web/Models/MileageTrakerContext.cs new file mode 100644 index 0000000..994f121 --- /dev/null +++ b/Web/Models/MileageTrakerContext.cs @@ -0,0 +1,17 @@ +using System.Data.Entity; +using System.Data.Entity.ModelConfiguration.Conventions; + +namespace MileageTraker.Web.Models +{ + public class MileageTrakerContext : DbContext + { + public DbSet Logs { get; set; } + public DbSet Vehicles { get; set; } + public DbSet Cities { get; set; } + + protected override void OnModelCreating(DbModelBuilder modelBuilder) + { + modelBuilder.Conventions.Remove(); + } + } +} \ No newline at end of file diff --git a/Web/Models/Vehicle.cs b/Web/Models/Vehicle.cs new file mode 100644 index 0000000..603bafd --- /dev/null +++ b/Web/Models/Vehicle.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; +using System.Web.Mvc; +using MileageTraker.Web.Utility; + +namespace MileageTraker.Web.Models +{ + public class Vehicle + { + [Required] + public int Key { get; set; } + + [Key] + [Required] + [StringLength(6, MinimumLength = 4, ErrorMessage = "Must be at least a 4 digit number")] + [Display(Name = "EHTRA ID")] + [RegularExpression(@"\d+", ErrorMessage = "Vehicle ID must be all numbers")] + public string VehicleId { get; set; } + + [Required] + [RegularExpression(@"\d{4}", ErrorMessage = "Must be 4 numbers")] + public string ModelYear { get; set; } + + [Required] + public string Make { get; set; } + + [Display(Name = "Model")] + [Required] + public string CarModel { get; set; } + + public string Color { get; set; } + + [Required] + [RegularExpression(@"Car|Truck|SUV|Van", ErrorMessage = "Must be Car, Truck, SUV, or Van")] + [FormatHint("Car, Truck, SUV or Van")] + public string Type { get; set; } + + [Required] + [Display(Name = "VIN")] + [RegularExpression(@"[0-9A-HJ-NPR-Z]{17}", ErrorMessage = "VIN must be 17-characters, not including letters I, O or Q")] + public string Vin { get; set; } + + [Required] + public decimal Price { get; set; } + + [Required] + [RegularExpression(@"\d{1,2}/\d{2}", ErrorMessage = "PurDate must be in mm/yy format")] + public string PurDate { get; set; } + + [Required] + [Display(Name = "Tag#")] + public string TagNumber { get; set; } + + [Required] + public string Prog { get; set; } + + [RegularExpression(@"Unassigned|[A-Za-z().]+(\s+[A-Za-z().]+)+", ErrorMessage = "Please enter the full name")] + [DisplayFormat(NullDisplayText = "Unassigned")] + public string Assigned { get; set; } + + public string Notes { get; set; } + + [Display(Name = "Current Odometer", ShortName= "ODO")] + [DisplayFormat(NullDisplayText = "?")] + public int? CurrentOdometer { get; set; } + + public virtual ICollection Logs { get; set; } + } +} \ No newline at end of file diff --git a/Web/Properties/AssemblyInfo.cs b/Web/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c6aa7d4 --- /dev/null +++ b/Web/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MileageTraker")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("MileageTraker")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2011")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("981b04e1-33bb-4cc1-841b-378d67ee0830")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: log4net.Config.XmlConfigurator(Watch = true)] \ No newline at end of file diff --git a/Web/README.jQuery.vsdoc.txt b/Web/README.jQuery.vsdoc.txt new file mode 100644 index 0000000..18458d0 --- /dev/null +++ b/Web/README.jQuery.vsdoc.txt @@ -0,0 +1 @@ +vsdoc files for Visual Studio IntelliSense are now included in the core jquery NuGet package. As a result, this pacakge is obsolete and will not be updated past version 1.6. You can uninstall it. \ No newline at end of file diff --git a/Web/Scripts/MicrosoftAjax.debug.js b/Web/Scripts/MicrosoftAjax.debug.js new file mode 100644 index 0000000..a5f7942 --- /dev/null +++ b/Web/Scripts/MicrosoftAjax.debug.js @@ -0,0 +1,7117 @@ +// Name: MicrosoftAjax.debug.js +// Assembly: System.Web.Extensions +// Version: 4.0.0.0 +// FileVersion: 4.0.20526.0 +//----------------------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//----------------------------------------------------------------------- +// MicrosoftAjax.js +// Microsoft AJAX Framework. + +Function.__typeName = 'Function'; +Function.__class = true; +Function.createCallback = function Function$createCallback(method, context) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "method", type: Function}, + {name: "context", mayBeNull: true} + ]); + if (e) throw e; + return function() { + var l = arguments.length; + if (l > 0) { + var args = []; + for (var i = 0; i < l; i++) { + args[i] = arguments[i]; + } + args[l] = context; + return method.apply(this, args); + } + return method.call(this, context); + } +} +Function.createDelegate = function Function$createDelegate(instance, method) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance", mayBeNull: true}, + {name: "method", type: Function} + ]); + if (e) throw e; + return function() { + return method.apply(instance, arguments); + } +} +Function.emptyFunction = Function.emptyMethod = function Function$emptyMethod() { + /// +} +Function.validateParameters = function Function$validateParameters(parameters, expectedParameters, validateParameterCount) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "parameters"}, + {name: "expectedParameters"}, + {name: "validateParameterCount", type: Boolean, optional: true} + ]); + if (e) throw e; + return Function._validateParams(parameters, expectedParameters, validateParameterCount); +} +Function._validateParams = function Function$_validateParams(params, expectedParams, validateParameterCount) { + var e, expectedLength = expectedParams.length; + validateParameterCount = validateParameterCount || (typeof(validateParameterCount) === "undefined"); + e = Function._validateParameterCount(params, expectedParams, validateParameterCount); + if (e) { + e.popStackFrame(); + return e; + } + for (var i = 0, l = params.length; i < l; i++) { + var expectedParam = expectedParams[Math.min(i, expectedLength - 1)], + paramName = expectedParam.name; + if (expectedParam.parameterArray) { + paramName += "[" + (i - expectedLength + 1) + "]"; + } + else if (!validateParameterCount && (i >= expectedLength)) { + break; + } + e = Function._validateParameter(params[i], expectedParam, paramName); + if (e) { + e.popStackFrame(); + return e; + } + } + return null; +} +Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams, validateParameterCount) { + var i, error, + expectedLen = expectedParams.length, + actualLen = params.length; + if (actualLen < expectedLen) { + var minParams = expectedLen; + for (i = 0; i < expectedLen; i++) { + var param = expectedParams[i]; + if (param.optional || param.parameterArray) { + minParams--; + } + } + if (actualLen < minParams) { + error = true; + } + } + else if (validateParameterCount && (actualLen > expectedLen)) { + error = true; + for (i = 0; i < expectedLen; i++) { + if (expectedParams[i].parameterArray) { + error = false; + break; + } + } + } + if (error) { + var e = Error.parameterCount(); + e.popStackFrame(); + return e; + } + return null; +} +Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) { + var e, + expectedType = expectedParam.type, + expectedInteger = !!expectedParam.integer, + expectedDomElement = !!expectedParam.domElement, + mayBeNull = !!expectedParam.mayBeNull; + e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName); + if (e) { + e.popStackFrame(); + return e; + } + var expectedElementType = expectedParam.elementType, + elementMayBeNull = !!expectedParam.elementMayBeNull; + if (expectedType === Array && typeof(param) !== "undefined" && param !== null && + (expectedElementType || !elementMayBeNull)) { + var expectedElementInteger = !!expectedParam.elementInteger, + expectedElementDomElement = !!expectedParam.elementDomElement; + for (var i=0; i < param.length; i++) { + var elem = param[i]; + e = Function._validateParameterType(elem, expectedElementType, + expectedElementInteger, expectedElementDomElement, elementMayBeNull, + paramName + "[" + i + "]"); + if (e) { + e.popStackFrame(); + return e; + } + } + } + return null; +} +Function._validateParameterType = function Function$_validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName) { + var e, i; + if (typeof(param) === "undefined") { + if (mayBeNull) { + return null; + } + else { + e = Error.argumentUndefined(paramName); + e.popStackFrame(); + return e; + } + } + if (param === null) { + if (mayBeNull) { + return null; + } + else { + e = Error.argumentNull(paramName); + e.popStackFrame(); + return e; + } + } + if (expectedType && expectedType.__enum) { + if (typeof(param) !== 'number') { + e = Error.argumentType(paramName, Object.getType(param), expectedType); + e.popStackFrame(); + return e; + } + if ((param % 1) === 0) { + var values = expectedType.prototype; + if (!expectedType.__flags || (param === 0)) { + for (i in values) { + if (values[i] === param) return null; + } + } + else { + var v = param; + for (i in values) { + var vali = values[i]; + if (vali === 0) continue; + if ((vali & param) === vali) { + v -= vali; + } + if (v === 0) return null; + } + } + } + e = Error.argumentOutOfRange(paramName, param, String.format(Sys.Res.enumInvalidValue, param, expectedType.getName())); + e.popStackFrame(); + return e; + } + if (expectedDomElement && (!Sys._isDomElement(param) || (param.nodeType === 3))) { + e = Error.argument(paramName, Sys.Res.argumentDomElement); + e.popStackFrame(); + return e; + } + if (expectedType && !Sys._isInstanceOfType(expectedType, param)) { + e = Error.argumentType(paramName, Object.getType(param), expectedType); + e.popStackFrame(); + return e; + } + if (expectedType === Number && expectedInteger) { + if ((param % 1) !== 0) { + e = Error.argumentOutOfRange(paramName, param, Sys.Res.argumentInteger); + e.popStackFrame(); + return e; + } + } + return null; +} + +Error.__typeName = 'Error'; +Error.__class = true; +Error.create = function Error$create(message, errorInfo) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true}, + {name: "errorInfo", mayBeNull: true, optional: true} + ]); + if (e) throw e; + var err = new Error(message); + err.message = message; + if (errorInfo) { + for (var v in errorInfo) { + err[v] = errorInfo[v]; + } + } + err.popStackFrame(); + return err; +} +Error.argument = function Error$argument(paramName, message) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentException: " + (message ? message : Sys.Res.argument); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName }); + err.popStackFrame(); + return err; +} +Error.argumentNull = function Error$argumentNull(paramName, message) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentNullException: " + (message ? message : Sys.Res.argumentNull); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName }); + err.popStackFrame(); + return err; +} +Error.argumentOutOfRange = function Error$argumentOutOfRange(paramName, actualValue, message) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "actualValue", mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentOutOfRangeException: " + (message ? message : Sys.Res.argumentOutOfRange); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + if (typeof(actualValue) !== "undefined" && actualValue !== null) { + displayMessage += "\n" + String.format(Sys.Res.actualValue, actualValue); + } + var err = Error.create(displayMessage, { + name: "Sys.ArgumentOutOfRangeException", + paramName: paramName, + actualValue: actualValue + }); + err.popStackFrame(); + return err; +} +Error.argumentType = function Error$argumentType(paramName, actualType, expectedType, message) { + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "actualType", type: Type, mayBeNull: true, optional: true}, + {name: "expectedType", type: Type, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentTypeException: "; + if (message) { + displayMessage += message; + } + else if (actualType && expectedType) { + displayMessage += + String.format(Sys.Res.argumentTypeWithTypes, actualType.getName(), expectedType.getName()); + } + else { + displayMessage += Sys.Res.argumentType; + } + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { + name: "Sys.ArgumentTypeException", + paramName: paramName, + actualType: actualType, + expectedType: expectedType + }); + err.popStackFrame(); + return err; +} +Error.argumentUndefined = function Error$argumentUndefined(paramName, message) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "paramName", type: String, mayBeNull: true, optional: true}, + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ArgumentUndefinedException: " + (message ? message : Sys.Res.argumentUndefined); + if (paramName) { + displayMessage += "\n" + String.format(Sys.Res.paramName, paramName); + } + var err = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName }); + err.popStackFrame(); + return err; +} +Error.format = function Error$format(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.FormatException: " + (message ? message : Sys.Res.format); + var err = Error.create(displayMessage, {name: 'Sys.FormatException'}); + err.popStackFrame(); + return err; +} +Error.invalidOperation = function Error$invalidOperation(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.InvalidOperationException: " + (message ? message : Sys.Res.invalidOperation); + var err = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'}); + err.popStackFrame(); + return err; +} +Error.notImplemented = function Error$notImplemented(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.NotImplementedException: " + (message ? message : Sys.Res.notImplemented); + var err = Error.create(displayMessage, {name: 'Sys.NotImplementedException'}); + err.popStackFrame(); + return err; +} +Error.parameterCount = function Error$parameterCount(message) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var displayMessage = "Sys.ParameterCountException: " + (message ? message : Sys.Res.parameterCount); + var err = Error.create(displayMessage, {name: 'Sys.ParameterCountException'}); + err.popStackFrame(); + return err; +} +Error.prototype.popStackFrame = function Error$popStackFrame() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (typeof(this.stack) === "undefined" || this.stack === null || + typeof(this.fileName) === "undefined" || this.fileName === null || + typeof(this.lineNumber) === "undefined" || this.lineNumber === null) { + return; + } + var stackFrames = this.stack.split("\n"); + var currentFrame = stackFrames[0]; + var pattern = this.fileName + ":" + this.lineNumber; + while(typeof(currentFrame) !== "undefined" && + currentFrame !== null && + currentFrame.indexOf(pattern) === -1) { + stackFrames.shift(); + currentFrame = stackFrames[0]; + } + var nextFrame = stackFrames[1]; + if (typeof(nextFrame) === "undefined" || nextFrame === null) { + return; + } + var nextFrameParts = nextFrame.match(/@(.*):(\d+)$/); + if (typeof(nextFrameParts) === "undefined" || nextFrameParts === null) { + return; + } + this.fileName = nextFrameParts[1]; + this.lineNumber = parseInt(nextFrameParts[2]); + stackFrames.shift(); + this.stack = stackFrames.join("\n"); +} + +Object.__typeName = 'Object'; +Object.__class = true; +Object.getType = function Object$getType(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"} + ]); + if (e) throw e; + var ctor = instance.constructor; + if (!ctor || (typeof(ctor) !== "function") || !ctor.__typeName || (ctor.__typeName === 'Object')) { + return Object; + } + return ctor; +} +Object.getTypeName = function Object$getTypeName(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"} + ]); + if (e) throw e; + return Object.getType(instance).getName(); +} + +String.__typeName = 'String'; +String.__class = true; +String.prototype.endsWith = function String$endsWith(suffix) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "suffix", type: String} + ]); + if (e) throw e; + return (this.substr(this.length - suffix.length) === suffix); +} +String.prototype.startsWith = function String$startsWith(prefix) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "prefix", type: String} + ]); + if (e) throw e; + return (this.substr(0, prefix.length) === prefix); +} +String.prototype.trim = function String$trim() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this.replace(/^\s+|\s+$/g, ''); +} +String.prototype.trimEnd = function String$trimEnd() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this.replace(/\s+$/, ''); +} +String.prototype.trimStart = function String$trimStart() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this.replace(/^\s+/, ''); +} +String.format = function String$format(format, args) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String}, + {name: "args", mayBeNull: true, parameterArray: true} + ]); + if (e) throw e; + return String._toFormattedString(false, arguments); +} +String._toFormattedString = function String$_toFormattedString(useLocale, args) { + var result = ''; + var format = args[0]; + for (var i=0;;) { + var open = format.indexOf('{', i); + var close = format.indexOf('}', i); + if ((open < 0) && (close < 0)) { + result += format.slice(i); + break; + } + if ((close > 0) && ((close < open) || (open < 0))) { + if (format.charAt(close + 1) !== '}') { + throw Error.argument('format', Sys.Res.stringFormatBraceMismatch); + } + result += format.slice(i, close + 1); + i = close + 2; + continue; + } + result += format.slice(i, open); + i = open + 1; + if (format.charAt(i) === '{') { + result += '{'; + i++; + continue; + } + if (close < 0) throw Error.argument('format', Sys.Res.stringFormatBraceMismatch); + var brace = format.substring(i, close); + var colonIndex = brace.indexOf(':'); + var argNumber = parseInt((colonIndex < 0)? brace : brace.substring(0, colonIndex), 10) + 1; + if (isNaN(argNumber)) throw Error.argument('format', Sys.Res.stringFormatInvalid); + var argFormat = (colonIndex < 0)? '' : brace.substring(colonIndex + 1); + var arg = args[argNumber]; + if (typeof(arg) === "undefined" || arg === null) { + arg = ''; + } + if (arg.toFormattedString) { + result += arg.toFormattedString(argFormat); + } + else if (useLocale && arg.localeFormat) { + result += arg.localeFormat(argFormat); + } + else if (arg.format) { + result += arg.format(argFormat); + } + else + result += arg.toString(); + i = close + 1; + } + return result; +} + +Boolean.__typeName = 'Boolean'; +Boolean.__class = true; +Boolean.parse = function Boolean$parse(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ], false); + if (e) throw e; + var v = value.trim().toLowerCase(); + if (v === 'false') return false; + if (v === 'true') return true; + throw Error.argumentOutOfRange('value', value, Sys.Res.boolTrueOrFalse); +} + +Date.__typeName = 'Date'; +Date.__class = true; + +Number.__typeName = 'Number'; +Number.__class = true; + +RegExp.__typeName = 'RegExp'; +RegExp.__class = true; + +if (!window) this.window = this; +window.Type = Function; +Type.__fullyQualifiedIdentifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]([^ \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*[^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\])?$", "i"); +Type.__identifierRegExp = new RegExp("^[^.0-9 \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\][^. \\s|,;:&*=+\\-()\\[\\]{}^%#@!~\\n\\r\\t\\f\\\\]*$", "i"); +Type.prototype.callBaseMethod = function Type$callBaseMethod(instance, name, baseArguments) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"}, + {name: "name", type: String}, + {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true} + ]); + if (e) throw e; + var baseMethod = Sys._getBaseMethod(this, instance, name); + if (!baseMethod) throw Error.invalidOperation(String.format(Sys.Res.methodNotFound, name)); + if (!baseArguments) { + return baseMethod.apply(instance); + } + else { + return baseMethod.apply(instance, baseArguments); + } +} +Type.prototype.getBaseMethod = function Type$getBaseMethod(instance, name) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"}, + {name: "name", type: String} + ]); + if (e) throw e; + return Sys._getBaseMethod(this, instance, name); +} +Type.prototype.getBaseType = function Type$getBaseType() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return (typeof(this.__baseType) === "undefined") ? null : this.__baseType; +} +Type.prototype.getInterfaces = function Type$getInterfaces() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var result = []; + var type = this; + while(type) { + var interfaces = type.__interfaces; + if (interfaces) { + for (var i = 0, l = interfaces.length; i < l; i++) { + var interfaceType = interfaces[i]; + if (!Array.contains(result, interfaceType)) { + result[result.length] = interfaceType; + } + } + } + type = type.__baseType; + } + return result; +} +Type.prototype.getName = function Type$getName() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return (typeof(this.__typeName) === "undefined") ? "" : this.__typeName; +} +Type.prototype.implementsInterface = function Type$implementsInterface(interfaceType) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "interfaceType", type: Type} + ]); + if (e) throw e; + this.resolveInheritance(); + var interfaceName = interfaceType.getName(); + var cache = this.__interfaceCache; + if (cache) { + var cacheEntry = cache[interfaceName]; + if (typeof(cacheEntry) !== 'undefined') return cacheEntry; + } + else { + cache = this.__interfaceCache = {}; + } + var baseType = this; + while (baseType) { + var interfaces = baseType.__interfaces; + if (interfaces) { + if (Array.indexOf(interfaces, interfaceType) !== -1) { + return cache[interfaceName] = true; + } + } + baseType = baseType.__baseType; + } + return cache[interfaceName] = false; +} +Type.prototype.inheritsFrom = function Type$inheritsFrom(parentType) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "parentType", type: Type} + ]); + if (e) throw e; + this.resolveInheritance(); + var baseType = this.__baseType; + while (baseType) { + if (baseType === parentType) { + return true; + } + baseType = baseType.__baseType; + } + return false; +} +Type.prototype.initializeBase = function Type$initializeBase(instance, baseArguments) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance"}, + {name: "baseArguments", type: Array, mayBeNull: true, optional: true, elementMayBeNull: true} + ]); + if (e) throw e; + if (!Sys._isInstanceOfType(this, instance)) throw Error.argumentType('instance', Object.getType(instance), this); + this.resolveInheritance(); + if (this.__baseType) { + if (!baseArguments) { + this.__baseType.apply(instance); + } + else { + this.__baseType.apply(instance, baseArguments); + } + } + return instance; +} +Type.prototype.isImplementedBy = function Type$isImplementedBy(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance", mayBeNull: true} + ]); + if (e) throw e; + if (typeof(instance) === "undefined" || instance === null) return false; + var instanceType = Object.getType(instance); + return !!(instanceType.implementsInterface && instanceType.implementsInterface(this)); +} +Type.prototype.isInstanceOfType = function Type$isInstanceOfType(instance) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "instance", mayBeNull: true} + ]); + if (e) throw e; + return Sys._isInstanceOfType(this, instance); +} +Type.prototype.registerClass = function Type$registerClass(typeName, baseType, interfaceTypes) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "typeName", type: String}, + {name: "baseType", type: Type, mayBeNull: true, optional: true}, + {name: "interfaceTypes", type: Type, parameterArray: true} + ]); + if (e) throw e; + if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName); + var parsedName; + try { + parsedName = eval(typeName); + } + catch(e) { + throw Error.argument('typeName', Sys.Res.argumentTypeName); + } + if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName); + if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName)); + if ((arguments.length > 1) && (typeof(baseType) === 'undefined')) throw Error.argumentUndefined('baseType'); + if (baseType && !baseType.__class) throw Error.argument('baseType', Sys.Res.baseNotAClass); + this.prototype.constructor = this; + this.__typeName = typeName; + this.__class = true; + if (baseType) { + this.__baseType = baseType; + this.__basePrototypePending = true; + } + Sys.__upperCaseTypes[typeName.toUpperCase()] = this; + if (interfaceTypes) { + this.__interfaces = []; + this.resolveInheritance(); + for (var i = 2, l = arguments.length; i < l; i++) { + var interfaceType = arguments[i]; + if (!interfaceType.__interface) throw Error.argument('interfaceTypes[' + (i - 2) + ']', Sys.Res.notAnInterface); + for (var methodName in interfaceType.prototype) { + var method = interfaceType.prototype[methodName]; + if (!this.prototype[methodName]) { + this.prototype[methodName] = method; + } + } + this.__interfaces.push(interfaceType); + } + } + Sys.__registeredTypes[typeName] = true; + return this; +} +Type.prototype.registerInterface = function Type$registerInterface(typeName) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "typeName", type: String} + ]); + if (e) throw e; + if (!Type.__fullyQualifiedIdentifierRegExp.test(typeName)) throw Error.argument('typeName', Sys.Res.notATypeName); + var parsedName; + try { + parsedName = eval(typeName); + } + catch(e) { + throw Error.argument('typeName', Sys.Res.argumentTypeName); + } + if (parsedName !== this) throw Error.argument('typeName', Sys.Res.badTypeName); + if (Sys.__registeredTypes[typeName]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, typeName)); + Sys.__upperCaseTypes[typeName.toUpperCase()] = this; + this.prototype.constructor = this; + this.__typeName = typeName; + this.__interface = true; + Sys.__registeredTypes[typeName] = true; + return this; +} +Type.prototype.resolveInheritance = function Type$resolveInheritance() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this.__basePrototypePending) { + var baseType = this.__baseType; + baseType.resolveInheritance(); + for (var memberName in baseType.prototype) { + var memberValue = baseType.prototype[memberName]; + if (!this.prototype[memberName]) { + this.prototype[memberName] = memberValue; + } + } + delete this.__basePrototypePending; + } +} +Type.getRootNamespaces = function Type$getRootNamespaces() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return Array.clone(Sys.__rootNamespaces); +} +Type.isClass = function Type$isClass(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__class; +} +Type.isInterface = function Type$isInterface(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__interface; +} +Type.isNamespace = function Type$isNamespace(object) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(object) === 'undefined') || (object === null)) return false; + return !!object.__namespace; +} +Type.parse = function Type$parse(typeName, ns) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "typeName", type: String, mayBeNull: true}, + {name: "ns", mayBeNull: true, optional: true} + ]); + if (e) throw e; + var fn; + if (ns) { + fn = Sys.__upperCaseTypes[ns.getName().toUpperCase() + '.' + typeName.toUpperCase()]; + return fn || null; + } + if (!typeName) return null; + if (!Type.__htClasses) { + Type.__htClasses = {}; + } + fn = Type.__htClasses[typeName]; + if (!fn) { + fn = eval(typeName); + if (typeof(fn) !== 'function') throw Error.argument('typeName', Sys.Res.notATypeName); + Type.__htClasses[typeName] = fn; + } + return fn; +} +Type.registerNamespace = function Type$registerNamespace(namespacePath) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "namespacePath", type: String} + ]); + if (e) throw e; + Type._registerNamespace(namespacePath); +} +Type._registerNamespace = function Type$_registerNamespace(namespacePath) { + if (!Type.__fullyQualifiedIdentifierRegExp.test(namespacePath)) throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); + var rootObject = window; + var namespaceParts = namespacePath.split('.'); + for (var i = 0; i < namespaceParts.length; i++) { + var currentPart = namespaceParts[i]; + var ns = rootObject[currentPart]; + var nsType = typeof(ns); + if ((nsType !== "undefined") && (ns !== null)) { + if (nsType === "function") { + throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsClass, namespaceParts.splice(0, i + 1).join('.'))); + } + if ((typeof(ns) !== "object") || (ns instanceof Array)) { + throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsNonObject, namespaceParts.splice(0, i + 1).join('.'))); + } + } + if (!ns) { + ns = rootObject[currentPart] = {}; + } + if (!ns.__namespace) { + if ((i === 0) && (namespacePath !== "Sys")) { + Sys.__rootNamespaces[Sys.__rootNamespaces.length] = ns; + } + ns.__namespace = true; + ns.__typeName = namespaceParts.slice(0, i + 1).join('.'); + var parsedName; + try { + parsedName = eval(ns.__typeName); + } + catch(e) { + parsedName = null; + } + if (parsedName !== ns) { + delete rootObject[currentPart]; + throw Error.argument('namespacePath', Sys.Res.invalidNameSpace); + } + ns.getName = function ns$getName() {return this.__typeName;} + } + rootObject = ns; + } +} +Type._checkDependency = function Type$_checkDependency(dependency, featureName) { + var scripts = Type._registerScript._scripts, isDependent = (scripts ? (!!scripts[dependency]) : false); + if ((typeof(featureName) !== 'undefined') && !isDependent) { + throw Error.invalidOperation(String.format(Sys.Res.requiredScriptReferenceNotIncluded, + featureName, dependency)); + } + return isDependent; +} +Type._registerScript = function Type$_registerScript(scriptName, dependencies) { + var scripts = Type._registerScript._scripts; + if (!scripts) { + Type._registerScript._scripts = scripts = {}; + } + if (scripts[scriptName]) { + throw Error.invalidOperation(String.format(Sys.Res.scriptAlreadyLoaded, scriptName)); + } + scripts[scriptName] = true; + if (dependencies) { + for (var i = 0, l = dependencies.length; i < l; i++) { + var dependency = dependencies[i]; + if (!Type._checkDependency(dependency)) { + throw Error.invalidOperation(String.format(Sys.Res.scriptDependencyNotFound, scriptName, dependency)); + } + } + } +} +Type._registerNamespace("Sys"); +Sys.__upperCaseTypes = {}; +Sys.__rootNamespaces = [Sys]; +Sys.__registeredTypes = {}; +Sys._isInstanceOfType = function Sys$_isInstanceOfType(type, instance) { + if (typeof(instance) === "undefined" || instance === null) return false; + if (instance instanceof type) return true; + var instanceType = Object.getType(instance); + return !!(instanceType === type) || + (instanceType.inheritsFrom && instanceType.inheritsFrom(type)) || + (instanceType.implementsInterface && instanceType.implementsInterface(type)); +} +Sys._getBaseMethod = function Sys$_getBaseMethod(type, instance, name) { + if (!Sys._isInstanceOfType(type, instance)) throw Error.argumentType('instance', Object.getType(instance), type); + var baseType = type.getBaseType(); + if (baseType) { + var baseMethod = baseType.prototype[name]; + return (baseMethod instanceof Function) ? baseMethod : null; + } + return null; +} +Sys._isDomElement = function Sys$_isDomElement(obj) { + var val = false; + if (typeof (obj.nodeType) !== 'number') { + var doc = obj.ownerDocument || obj.document || obj; + if (doc != obj) { + var w = doc.defaultView || doc.parentWindow; + val = (w != obj); + } + else { + val = (typeof (doc.body) === 'undefined'); + } + } + return !val; +} + +Array.__typeName = 'Array'; +Array.__class = true; +Array.add = Array.enqueue = function Array$enqueue(array, item) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + array[array.length] = item; +} +Array.addRange = function Array$addRange(array, items) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "items", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + array.push.apply(array, items); +} +Array.clear = function Array$clear(array) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + array.length = 0; +} +Array.clone = function Array$clone(array) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + if (array.length === 1) { + return [array[0]]; + } + else { + return Array.apply(null, array); + } +} +Array.contains = function Array$contains(array, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + return (Sys._indexOf(array, item) >= 0); +} +Array.dequeue = function Array$dequeue(array) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + return array.shift(); +} +Array.forEach = function Array$forEach(array, method, instance) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "method", type: Function}, + {name: "instance", mayBeNull: true, optional: true} + ]); + if (e) throw e; + for (var i = 0, l = array.length; i < l; i++) { + var elt = array[i]; + if (typeof(elt) !== 'undefined') method.call(instance, elt, i, array); + } +} +Array.indexOf = function Array$indexOf(array, item, start) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true, optional: true}, + {name: "start", mayBeNull: true, optional: true} + ]); + if (e) throw e; + return Sys._indexOf(array, item, start); +} +Array.insert = function Array$insert(array, index, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "index", mayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + array.splice(index, 0, item); +} +Array.parse = function Array$parse(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String, mayBeNull: true} + ]); + if (e) throw e; + if (!value) return []; + var v = eval(value); + if (!Array.isInstanceOfType(v)) throw Error.argument('value', Sys.Res.arrayParseBadFormat); + return v; +} +Array.remove = function Array$remove(array, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + var index = Sys._indexOf(array, item); + if (index >= 0) { + array.splice(index, 1); + } + return (index >= 0); +} +Array.removeAt = function Array$removeAt(array, index) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "array", type: Array, elementMayBeNull: true}, + {name: "index", mayBeNull: true} + ]); + if (e) throw e; + array.splice(index, 1); +} +Sys._indexOf = function Sys$_indexOf(array, item, start) { + if (typeof(item) === "undefined") return -1; + var length = array.length; + if (length !== 0) { + start = start - 0; + if (isNaN(start)) { + start = 0; + } + else { + if (isFinite(start)) { + start = start - (start % 1); + } + if (start < 0) { + start = Math.max(0, length + start); + } + } + for (var i = start; i < length; i++) { + if ((typeof(array[i]) !== "undefined") && (array[i] === item)) { + return i; + } + } + } + return -1; +} +Type._registerScript._scripts = { + "MicrosoftAjaxCore.js": true, + "MicrosoftAjaxGlobalization.js": true, + "MicrosoftAjaxSerialization.js": true, + "MicrosoftAjaxComponentModel.js": true, + "MicrosoftAjaxHistory.js": true, + "MicrosoftAjaxNetwork.js" : true, + "MicrosoftAjaxWebServices.js": true }; + +Sys.IDisposable = function Sys$IDisposable() { + throw Error.notImplemented(); +} + function Sys$IDisposable$dispose() { + throw Error.notImplemented(); + } +Sys.IDisposable.prototype = { + dispose: Sys$IDisposable$dispose +} +Sys.IDisposable.registerInterface('Sys.IDisposable'); + +Sys.StringBuilder = function Sys$StringBuilder(initialText) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "initialText", mayBeNull: true, optional: true} + ]); + if (e) throw e; + this._parts = (typeof(initialText) !== 'undefined' && initialText !== null && initialText !== '') ? + [initialText.toString()] : []; + this._value = {}; + this._len = 0; +} + function Sys$StringBuilder$append(text) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "text", mayBeNull: true} + ]); + if (e) throw e; + this._parts[this._parts.length] = text; + } + function Sys$StringBuilder$appendLine(text) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "text", mayBeNull: true, optional: true} + ]); + if (e) throw e; + this._parts[this._parts.length] = + ((typeof(text) === 'undefined') || (text === null) || (text === '')) ? + '\r\n' : text + '\r\n'; + } + function Sys$StringBuilder$clear() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._parts = []; + this._value = {}; + this._len = 0; + } + function Sys$StringBuilder$isEmpty() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._parts.length === 0) return true; + return this.toString() === ''; + } + function Sys$StringBuilder$toString(separator) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "separator", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + separator = separator || ''; + var parts = this._parts; + if (this._len !== parts.length) { + this._value = {}; + this._len = parts.length; + } + var val = this._value; + if (typeof(val[separator]) === 'undefined') { + if (separator !== '') { + for (var i = 0; i < parts.length;) { + if ((typeof(parts[i]) === 'undefined') || (parts[i] === '') || (parts[i] === null)) { + parts.splice(i, 1); + } + else { + i++; + } + } + } + val[separator] = this._parts.join(separator); + } + return val[separator]; + } +Sys.StringBuilder.prototype = { + append: Sys$StringBuilder$append, + appendLine: Sys$StringBuilder$appendLine, + clear: Sys$StringBuilder$clear, + isEmpty: Sys$StringBuilder$isEmpty, + toString: Sys$StringBuilder$toString +} +Sys.StringBuilder.registerClass('Sys.StringBuilder'); + +Sys.Browser = {}; +Sys.Browser.InternetExplorer = {}; +Sys.Browser.Firefox = {}; +Sys.Browser.Safari = {}; +Sys.Browser.Opera = {}; +Sys.Browser.agent = null; +Sys.Browser.hasDebuggerStatement = false; +Sys.Browser.name = navigator.appName; +Sys.Browser.version = parseFloat(navigator.appVersion); +Sys.Browser.documentMode = 0; +if (navigator.userAgent.indexOf(' MSIE ') > -1) { + Sys.Browser.agent = Sys.Browser.InternetExplorer; + Sys.Browser.version = parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]); + if (Sys.Browser.version >= 8) { + if (document.documentMode >= 7) { + Sys.Browser.documentMode = document.documentMode; + } + } + Sys.Browser.hasDebuggerStatement = true; +} +else if (navigator.userAgent.indexOf(' Firefox/') > -1) { + Sys.Browser.agent = Sys.Browser.Firefox; + Sys.Browser.version = parseFloat(navigator.userAgent.match(/ Firefox\/(\d+\.\d+)/)[1]); + Sys.Browser.name = 'Firefox'; + Sys.Browser.hasDebuggerStatement = true; +} +else if (navigator.userAgent.indexOf(' AppleWebKit/') > -1) { + Sys.Browser.agent = Sys.Browser.Safari; + Sys.Browser.version = parseFloat(navigator.userAgent.match(/ AppleWebKit\/(\d+(\.\d+)?)/)[1]); + Sys.Browser.name = 'Safari'; +} +else if (navigator.userAgent.indexOf('Opera/') > -1) { + Sys.Browser.agent = Sys.Browser.Opera; +} + +Sys.EventArgs = function Sys$EventArgs() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); +} +Sys.EventArgs.registerClass('Sys.EventArgs'); +Sys.EventArgs.Empty = new Sys.EventArgs(); + +Sys.CancelEventArgs = function Sys$CancelEventArgs() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + Sys.CancelEventArgs.initializeBase(this); + this._cancel = false; +} + function Sys$CancelEventArgs$get_cancel() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._cancel; + } + function Sys$CancelEventArgs$set_cancel(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); + if (e) throw e; + this._cancel = value; + } +Sys.CancelEventArgs.prototype = { + get_cancel: Sys$CancelEventArgs$get_cancel, + set_cancel: Sys$CancelEventArgs$set_cancel +} +Sys.CancelEventArgs.registerClass('Sys.CancelEventArgs', Sys.EventArgs); +Type.registerNamespace('Sys.UI'); + +Sys._Debug = function Sys$_Debug() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); +} + function Sys$_Debug$_appendConsole(text) { + if ((typeof(Debug) !== 'undefined') && Debug.writeln) { + Debug.writeln(text); + } + if (window.console && window.console.log) { + window.console.log(text); + } + if (window.opera) { + window.opera.postError(text); + } + if (window.debugService) { + window.debugService.trace(text); + } + } + function Sys$_Debug$_appendTrace(text) { + var traceElement = document.getElementById('TraceConsole'); + if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) { + traceElement.value += text + '\n'; + } + } + function Sys$_Debug$assert(condition, message, displayCaller) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "condition", type: Boolean}, + {name: "message", type: String, mayBeNull: true, optional: true}, + {name: "displayCaller", type: Boolean, optional: true} + ]); + if (e) throw e; + if (!condition) { + message = (displayCaller && this.assert.caller) ? + String.format(Sys.Res.assertFailedCaller, message, this.assert.caller) : + String.format(Sys.Res.assertFailed, message); + if (confirm(String.format(Sys.Res.breakIntoDebugger, message))) { + this.fail(message); + } + } + } + function Sys$_Debug$clearTrace() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var traceElement = document.getElementById('TraceConsole'); + if (traceElement && (traceElement.tagName.toUpperCase() === 'TEXTAREA')) { + traceElement.value = ''; + } + } + function Sys$_Debug$fail(message) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "message", type: String, mayBeNull: true} + ]); + if (e) throw e; + this._appendConsole(message); + if (Sys.Browser.hasDebuggerStatement) { + eval('debugger'); + } + } + function Sys$_Debug$trace(text) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "text"} + ]); + if (e) throw e; + this._appendConsole(text); + this._appendTrace(text); + } + function Sys$_Debug$traceDump(object, name) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", mayBeNull: true}, + {name: "name", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var text = this._traceDump(object, name, true); + } + function Sys$_Debug$_traceDump(object, name, recursive, indentationPadding, loopArray) { + name = name? name : 'traceDump'; + indentationPadding = indentationPadding? indentationPadding : ''; + if (object === null) { + this.trace(indentationPadding + name + ': null'); + return; + } + switch(typeof(object)) { + case 'undefined': + this.trace(indentationPadding + name + ': Undefined'); + break; + case 'number': case 'string': case 'boolean': + this.trace(indentationPadding + name + ': ' + object); + break; + default: + if (Date.isInstanceOfType(object) || RegExp.isInstanceOfType(object)) { + this.trace(indentationPadding + name + ': ' + object.toString()); + break; + } + if (!loopArray) { + loopArray = []; + } + else if (Array.contains(loopArray, object)) { + this.trace(indentationPadding + name + ': ...'); + return; + } + Array.add(loopArray, object); + if ((object == window) || (object === document) || + (window.HTMLElement && (object instanceof HTMLElement)) || + (typeof(object.nodeName) === 'string')) { + var tag = object.tagName? object.tagName : 'DomElement'; + if (object.id) { + tag += ' - ' + object.id; + } + this.trace(indentationPadding + name + ' {' + tag + '}'); + } + else { + var typeName = Object.getTypeName(object); + this.trace(indentationPadding + name + (typeof(typeName) === 'string' ? ' {' + typeName + '}' : '')); + if ((indentationPadding === '') || recursive) { + indentationPadding += " "; + var i, length, properties, p, v; + if (Array.isInstanceOfType(object)) { + length = object.length; + for (i = 0; i < length; i++) { + this._traceDump(object[i], '[' + i + ']', recursive, indentationPadding, loopArray); + } + } + else { + for (p in object) { + v = object[p]; + if (!Function.isInstanceOfType(v)) { + this._traceDump(v, p, recursive, indentationPadding, loopArray); + } + } + } + } + } + Array.remove(loopArray, object); + } + } +Sys._Debug.prototype = { + _appendConsole: Sys$_Debug$_appendConsole, + _appendTrace: Sys$_Debug$_appendTrace, + assert: Sys$_Debug$assert, + clearTrace: Sys$_Debug$clearTrace, + fail: Sys$_Debug$fail, + trace: Sys$_Debug$trace, + traceDump: Sys$_Debug$traceDump, + _traceDump: Sys$_Debug$_traceDump +} +Sys._Debug.registerClass('Sys._Debug'); +Sys.Debug = new Sys._Debug(); + Sys.Debug.isDebug = true; + +function Sys$Enum$parse(value, ignoreCase) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String}, + {name: "ignoreCase", type: Boolean, optional: true} + ]); + if (e) throw e; + var values, parsed, val; + if (ignoreCase) { + values = this.__lowerCaseValues; + if (!values) { + this.__lowerCaseValues = values = {}; + var prototype = this.prototype; + for (var name in prototype) { + values[name.toLowerCase()] = prototype[name]; + } + } + } + else { + values = this.prototype; + } + if (!this.__flags) { + val = (ignoreCase ? value.toLowerCase() : value); + parsed = values[val.trim()]; + if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); + return parsed; + } + else { + var parts = (ignoreCase ? value.toLowerCase() : value).split(','); + var v = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var part = parts[i].trim(); + parsed = values[part]; + if (typeof(parsed) !== 'number') throw Error.argument('value', String.format(Sys.Res.enumInvalidValue, value.split(',')[i].trim(), this.__typeName)); + v |= parsed; + } + return v; + } +} +function Sys$Enum$toString(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", mayBeNull: true, optional: true} + ]); + if (e) throw e; + if ((typeof(value) === 'undefined') || (value === null)) return this.__string; + if ((typeof(value) != 'number') || ((value % 1) !== 0)) throw Error.argumentType('value', Object.getType(value), this); + var values = this.prototype; + var i; + if (!this.__flags || (value === 0)) { + for (i in values) { + if (values[i] === value) { + return i; + } + } + } + else { + var sorted = this.__sortedValues; + if (!sorted) { + sorted = []; + for (i in values) { + sorted[sorted.length] = {key: i, value: values[i]}; + } + sorted.sort(function(a, b) { + return a.value - b.value; + }); + this.__sortedValues = sorted; + } + var parts = []; + var v = value; + for (i = sorted.length - 1; i >= 0; i--) { + var kvp = sorted[i]; + var vali = kvp.value; + if (vali === 0) continue; + if ((vali & value) === vali) { + parts[parts.length] = kvp.key; + v -= vali; + if (v === 0) break; + } + } + if (parts.length && v === 0) return parts.reverse().join(', '); + } + throw Error.argumentOutOfRange('value', value, String.format(Sys.Res.enumInvalidValue, value, this.__typeName)); +} +Type.prototype.registerEnum = function Type$registerEnum(name, flags) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "name", type: String}, + {name: "flags", type: Boolean, optional: true} + ]); + if (e) throw e; + if (!Type.__fullyQualifiedIdentifierRegExp.test(name)) throw Error.argument('name', Sys.Res.notATypeName); + var parsedName; + try { + parsedName = eval(name); + } + catch(e) { + throw Error.argument('name', Sys.Res.argumentTypeName); + } + if (parsedName !== this) throw Error.argument('name', Sys.Res.badTypeName); + if (Sys.__registeredTypes[name]) throw Error.invalidOperation(String.format(Sys.Res.typeRegisteredTwice, name)); + for (var j in this.prototype) { + var val = this.prototype[j]; + if (!Type.__identifierRegExp.test(j)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, j)); + if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger); + if (typeof(this[j]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, j)); + } + Sys.__upperCaseTypes[name.toUpperCase()] = this; + for (var i in this.prototype) { + this[i] = this.prototype[i]; + } + this.__typeName = name; + this.parse = Sys$Enum$parse; + this.__string = this.toString(); + this.toString = Sys$Enum$toString; + this.__flags = flags; + this.__enum = true; + Sys.__registeredTypes[name] = true; +} +Type.isEnum = function Type$isEnum(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__enum; +} +Type.isFlags = function Type$isFlags(type) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", mayBeNull: true} + ]); + if (e) throw e; + if ((typeof(type) === 'undefined') || (type === null)) return false; + return !!type.__flags; +} +Sys.CollectionChange = function Sys$CollectionChange(action, newItems, newStartingIndex, oldItems, oldStartingIndex) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "action", type: Sys.NotifyCollectionChangedAction}, + {name: "newItems", mayBeNull: true, optional: true}, + {name: "newStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true}, + {name: "oldItems", mayBeNull: true, optional: true}, + {name: "oldStartingIndex", type: Number, mayBeNull: true, integer: true, optional: true} + ]); + if (e) throw e; + this.action = action; + if (newItems) { + if (!(newItems instanceof Array)) { + newItems = [newItems]; + } + } + this.newItems = newItems || null; + if (typeof newStartingIndex !== "number") { + newStartingIndex = -1; + } + this.newStartingIndex = newStartingIndex; + if (oldItems) { + if (!(oldItems instanceof Array)) { + oldItems = [oldItems]; + } + } + this.oldItems = oldItems || null; + if (typeof oldStartingIndex !== "number") { + oldStartingIndex = -1; + } + this.oldStartingIndex = oldStartingIndex; +} +Sys.CollectionChange.registerClass("Sys.CollectionChange"); +Sys.NotifyCollectionChangedAction = function Sys$NotifyCollectionChangedAction() { + /// + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.NotifyCollectionChangedAction.prototype = { + add: 0, + remove: 1, + reset: 2 +} +Sys.NotifyCollectionChangedAction.registerEnum('Sys.NotifyCollectionChangedAction'); +Sys.NotifyCollectionChangedEventArgs = function Sys$NotifyCollectionChangedEventArgs(changes) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "changes", type: Array, elementType: Sys.CollectionChange} + ]); + if (e) throw e; + this._changes = changes; + Sys.NotifyCollectionChangedEventArgs.initializeBase(this); +} + function Sys$NotifyCollectionChangedEventArgs$get_changes() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._changes || []; + } +Sys.NotifyCollectionChangedEventArgs.prototype = { + get_changes: Sys$NotifyCollectionChangedEventArgs$get_changes +} +Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs", Sys.EventArgs); +Sys.Observer = function Sys$Observer() { + throw Error.invalidOperation(); +} +Sys.Observer.registerClass("Sys.Observer"); +Sys.Observer.makeObservable = function Sys$Observer$makeObservable(target) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + var isArray = target instanceof Array, + o = Sys.Observer; + Sys.Observer._ensureObservable(target); + if (target.setValue === o._observeMethods.setValue) return target; + o._addMethods(target, o._observeMethods); + if (isArray) { + o._addMethods(target, o._arrayMethods); + } + return target; +} +Sys.Observer._ensureObservable = function Sys$Observer$_ensureObservable(target) { + var type = typeof target; + if ((type === "string") || (type === "number") || (type === "boolean") || (type === "date")) { + throw Error.invalidOperation(String.format(Sys.Res.notObservable, type)); + } +} +Sys.Observer._addMethods = function Sys$Observer$_addMethods(target, methods) { + for (var m in methods) { + if (target[m] && (target[m] !== methods[m])) { + throw Error.invalidOperation(String.format(Sys.Res.observableConflict, m)); + } + target[m] = methods[m]; + } +} +Sys.Observer._addEventHandler = function Sys$Observer$_addEventHandler(target, eventName, handler) { + Sys.Observer._getContext(target, true).events._addHandler(eventName, handler); +} +Sys.Observer.addEventHandler = function Sys$Observer$addEventHandler(target, eventName, handler) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._addEventHandler(target, eventName, handler); +} +Sys.Observer._removeEventHandler = function Sys$Observer$_removeEventHandler(target, eventName, handler) { + Sys.Observer._getContext(target, true).events._removeHandler(eventName, handler); +} +Sys.Observer.removeEventHandler = function Sys$Observer$removeEventHandler(target, eventName, handler) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._removeEventHandler(target, eventName, handler); +} +Sys.Observer.raiseEvent = function Sys$Observer$raiseEvent(target, eventName, eventArgs) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "eventName", type: String}, + {name: "eventArgs", type: Sys.EventArgs} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + var ctx = Sys.Observer._getContext(target); + if (!ctx) return; + var handler = ctx.events.getHandler(eventName); + if (handler) { + handler(target, eventArgs); + } +} +Sys.Observer.addPropertyChanged = function Sys$Observer$addPropertyChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._addEventHandler(target, "propertyChanged", handler); +} +Sys.Observer.removePropertyChanged = function Sys$Observer$removePropertyChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._removeEventHandler(target, "propertyChanged", handler); +} +Sys.Observer.beginUpdate = function Sys$Observer$beginUpdate(target) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._getContext(target, true).updating = true; +} +Sys.Observer.endUpdate = function Sys$Observer$endUpdate(target) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + var ctx = Sys.Observer._getContext(target); + if (!ctx || !ctx.updating) return; + ctx.updating = false; + var dirty = ctx.dirty; + ctx.dirty = false; + if (dirty) { + if (target instanceof Array) { + var changes = ctx.changes; + ctx.changes = null; + Sys.Observer.raiseCollectionChanged(target, changes); + } + Sys.Observer.raisePropertyChanged(target, ""); + } +} +Sys.Observer.isUpdating = function Sys$Observer$isUpdating(target) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + var ctx = Sys.Observer._getContext(target); + return ctx ? ctx.updating : false; +} +Sys.Observer._setValue = function Sys$Observer$_setValue(target, propertyName, value) { + var getter, setter, mainTarget = target, path = propertyName.split('.'); + for (var i = 0, l = (path.length - 1); i < l ; i++) { + var name = path[i]; + getter = target["get_" + name]; + if (typeof (getter) === "function") { + target = getter.call(target); + } + else { + target = target[name]; + } + var type = typeof (target); + if ((target === null) || (type === "undefined")) { + throw Error.invalidOperation(String.format(Sys.Res.nullReferenceInPath, propertyName)); + } + } + var currentValue, lastPath = path[l]; + getter = target["get_" + lastPath]; + setter = target["set_" + lastPath]; + if (typeof(getter) === 'function') { + currentValue = getter.call(target); + } + else { + currentValue = target[lastPath]; + } + if (typeof(setter) === 'function') { + setter.call(target, value); + } + else { + target[lastPath] = value; + } + if (currentValue !== value) { + var ctx = Sys.Observer._getContext(mainTarget); + if (ctx && ctx.updating) { + ctx.dirty = true; + return; + }; + Sys.Observer.raisePropertyChanged(mainTarget, path[0]); + } +} +Sys.Observer.setValue = function Sys$Observer$setValue(target, propertyName, value) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "propertyName", type: String}, + {name: "value", mayBeNull: true} + ]); + if (e) throw e; + Sys.Observer._ensureObservable(target); + Sys.Observer._setValue(target, propertyName, value); +} +Sys.Observer.raisePropertyChanged = function Sys$Observer$raisePropertyChanged(target, propertyName) { + /// + /// + /// + Sys.Observer.raiseEvent(target, "propertyChanged", new Sys.PropertyChangedEventArgs(propertyName)); +} +Sys.Observer.addCollectionChanged = function Sys$Observer$addCollectionChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._addEventHandler(target, "collectionChanged", handler); +} +Sys.Observer.removeCollectionChanged = function Sys$Observer$removeCollectionChanged(target, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._removeEventHandler(target, "collectionChanged", handler); +} +Sys.Observer._collectionChange = function Sys$Observer$_collectionChange(target, change) { + var ctx = Sys.Observer._getContext(target); + if (ctx && ctx.updating) { + ctx.dirty = true; + var changes = ctx.changes; + if (!changes) { + ctx.changes = changes = [change]; + } + else { + changes.push(change); + } + } + else { + Sys.Observer.raiseCollectionChanged(target, [change]); + Sys.Observer.raisePropertyChanged(target, 'length'); + } +} +Sys.Observer.add = function Sys$Observer$add(target, item) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], target.length); + Array.add(target, item); + Sys.Observer._collectionChange(target, change); +} +Sys.Observer.addRange = function Sys$Observer$addRange(target, items) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "items", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + var change = new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, items, target.length); + Array.addRange(target, items); + Sys.Observer._collectionChange(target, change); +} +Sys.Observer.clear = function Sys$Observer$clear(target) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true} + ]); + if (e) throw e; + var oldItems = Array.clone(target); + Array.clear(target); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.reset, null, -1, oldItems, 0)); +} +Sys.Observer.insert = function Sys$Observer$insert(target, index, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "index", type: Number, integer: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + Array.insert(target, index, item); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.add, [item], index)); +} +Sys.Observer.remove = function Sys$Observer$remove(target, item) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "item", mayBeNull: true} + ]); + if (e) throw e; + var index = Array.indexOf(target, item); + if (index !== -1) { + Array.remove(target, item); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index)); + return true; + } + return false; +} +Sys.Observer.removeAt = function Sys$Observer$removeAt(target, index) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target", type: Array, elementMayBeNull: true}, + {name: "index", type: Number, integer: true} + ]); + if (e) throw e; + if ((index > -1) && (index < target.length)) { + var item = target[index]; + Array.removeAt(target, index); + Sys.Observer._collectionChange(target, new Sys.CollectionChange(Sys.NotifyCollectionChangedAction.remove, null, -1, [item], index)); + } +} +Sys.Observer.raiseCollectionChanged = function Sys$Observer$raiseCollectionChanged(target, changes) { + /// + /// + /// + Sys.Observer.raiseEvent(target, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes)); +} +Sys.Observer._observeMethods = { + add_propertyChanged: function(handler) { + Sys.Observer._addEventHandler(this, "propertyChanged", handler); + }, + remove_propertyChanged: function(handler) { + Sys.Observer._removeEventHandler(this, "propertyChanged", handler); + }, + addEventHandler: function(eventName, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._addEventHandler(this, eventName, handler); + }, + removeEventHandler: function(eventName, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.Observer._removeEventHandler(this, eventName, handler); + }, + get_isUpdating: function() { + /// + /// + return Sys.Observer.isUpdating(this); + }, + beginUpdate: function() { + /// + Sys.Observer.beginUpdate(this); + }, + endUpdate: function() { + /// + Sys.Observer.endUpdate(this); + }, + setValue: function(name, value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "name", type: String}, + {name: "value", mayBeNull: true} + ]); + if (e) throw e; + Sys.Observer._setValue(this, name, value); + }, + raiseEvent: function(eventName, eventArgs) { + /// + /// + /// + Sys.Observer.raiseEvent(this, eventName, eventArgs); + }, + raisePropertyChanged: function(name) { + /// + /// + Sys.Observer.raiseEvent(this, "propertyChanged", new Sys.PropertyChangedEventArgs(name)); + } +} +Sys.Observer._arrayMethods = { + add_collectionChanged: function(handler) { + Sys.Observer._addEventHandler(this, "collectionChanged", handler); + }, + remove_collectionChanged: function(handler) { + Sys.Observer._removeEventHandler(this, "collectionChanged", handler); + }, + add: function(item) { + /// + /// + Sys.Observer.add(this, item); + }, + addRange: function(items) { + /// + /// + Sys.Observer.addRange(this, items); + }, + clear: function() { + /// + Sys.Observer.clear(this); + }, + insert: function(index, item) { + /// + /// + /// + Sys.Observer.insert(this, index, item); + }, + remove: function(item) { + /// + /// + /// + return Sys.Observer.remove(this, item); + }, + removeAt: function(index) { + /// + /// + Sys.Observer.removeAt(this, index); + }, + raiseCollectionChanged: function(changes) { + /// + /// + Sys.Observer.raiseEvent(this, "collectionChanged", new Sys.NotifyCollectionChangedEventArgs(changes)); + } +} +Sys.Observer._getContext = function Sys$Observer$_getContext(obj, create) { + var ctx = obj._observerContext; + if (ctx) return ctx(); + if (create) { + return (obj._observerContext = Sys.Observer._createContext())(); + } + return null; +} +Sys.Observer._createContext = function Sys$Observer$_createContext() { + var ctx = { + events: new Sys.EventHandlerList() + }; + return function() { + return ctx; + } +} +Date._appendPreOrPostMatch = function Date$_appendPreOrPostMatch(preMatch, strBuilder) { + var quoteCount = 0; + var escaped = false; + for (var i = 0, il = preMatch.length; i < il; i++) { + var c = preMatch.charAt(i); + switch (c) { + case '\'': + if (escaped) strBuilder.append("'"); + else quoteCount++; + escaped = false; + break; + case '\\': + if (escaped) strBuilder.append("\\"); + escaped = !escaped; + break; + default: + strBuilder.append(c); + escaped = false; + break; + } + } + return quoteCount; +} +Date._expandFormat = function Date$_expandFormat(dtf, format) { + if (!format) { + format = "F"; + } + var len = format.length; + if (len === 1) { + switch (format) { + case "d": + return dtf.ShortDatePattern; + case "D": + return dtf.LongDatePattern; + case "t": + return dtf.ShortTimePattern; + case "T": + return dtf.LongTimePattern; + case "f": + return dtf.LongDatePattern + " " + dtf.ShortTimePattern; + case "F": + return dtf.FullDateTimePattern; + case "M": case "m": + return dtf.MonthDayPattern; + case "s": + return dtf.SortableDateTimePattern; + case "Y": case "y": + return dtf.YearMonthPattern; + default: + throw Error.format(Sys.Res.formatInvalidString); + } + } + else if ((len === 2) && (format.charAt(0) === "%")) { + format = format.charAt(1); + } + return format; +} +Date._expandYear = function Date$_expandYear(dtf, year) { + var now = new Date(), + era = Date._getEra(now); + if (year < 100) { + var curr = Date._getEraYear(now, dtf, era); + year += curr - (curr % 100); + if (year > dtf.Calendar.TwoDigitYearMax) { + year -= 100; + } + } + return year; +} +Date._getEra = function Date$_getEra(date, eras) { + if (!eras) return 0; + var start, ticks = date.getTime(); + for (var i = 0, l = eras.length; i < l; i += 4) { + start = eras[i+2]; + if ((start === null) || (ticks >= start)) { + return i; + } + } + return 0; +} +Date._getEraYear = function Date$_getEraYear(date, dtf, era, sortable) { + var year = date.getFullYear(); + if (!sortable && dtf.eras) { + year -= dtf.eras[era + 3]; + } + return year; +} +Date._getParseRegExp = function Date$_getParseRegExp(dtf, format) { + if (!dtf._parseRegExp) { + dtf._parseRegExp = {}; + } + else if (dtf._parseRegExp[format]) { + return dtf._parseRegExp[format]; + } + var expFormat = Date._expandFormat(dtf, format); + expFormat = expFormat.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1"); + var regexp = new Sys.StringBuilder("^"); + var groups = []; + var index = 0; + var quoteCount = 0; + var tokenRegExp = Date._getTokenRegExp(); + var match; + while ((match = tokenRegExp.exec(expFormat)) !== null) { + var preMatch = expFormat.slice(index, match.index); + index = tokenRegExp.lastIndex; + quoteCount += Date._appendPreOrPostMatch(preMatch, regexp); + if ((quoteCount%2) === 1) { + regexp.append(match[0]); + continue; + } + switch (match[0]) { + case 'dddd': case 'ddd': + case 'MMMM': case 'MMM': + case 'gg': case 'g': + regexp.append("(\\D+)"); + break; + case 'tt': case 't': + regexp.append("(\\D*)"); + break; + case 'yyyy': + regexp.append("(\\d{4})"); + break; + case 'fff': + regexp.append("(\\d{3})"); + break; + case 'ff': + regexp.append("(\\d{2})"); + break; + case 'f': + regexp.append("(\\d)"); + break; + case 'dd': case 'd': + case 'MM': case 'M': + case 'yy': case 'y': + case 'HH': case 'H': + case 'hh': case 'h': + case 'mm': case 'm': + case 'ss': case 's': + regexp.append("(\\d\\d?)"); + break; + case 'zzz': + regexp.append("([+-]?\\d\\d?:\\d{2})"); + break; + case 'zz': case 'z': + regexp.append("([+-]?\\d\\d?)"); + break; + case '/': + regexp.append("(\\" + dtf.DateSeparator + ")"); + break; + default: + Sys.Debug.fail("Invalid date format pattern"); + } + Array.add(groups, match[0]); + } + Date._appendPreOrPostMatch(expFormat.slice(index), regexp); + regexp.append("$"); + var regexpStr = regexp.toString().replace(/\s+/g, "\\s+"); + var parseRegExp = {'regExp': regexpStr, 'groups': groups}; + dtf._parseRegExp[format] = parseRegExp; + return parseRegExp; +} +Date._getTokenRegExp = function Date$_getTokenRegExp() { + return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g; +} +Date.parseLocale = function Date$parseLocale(value, formats) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String}, + {name: "formats", mayBeNull: true, optional: true, parameterArray: true} + ]); + if (e) throw e; + return Date._parse(value, Sys.CultureInfo.CurrentCulture, arguments); +} +Date.parseInvariant = function Date$parseInvariant(value, formats) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String}, + {name: "formats", mayBeNull: true, optional: true, parameterArray: true} + ]); + if (e) throw e; + return Date._parse(value, Sys.CultureInfo.InvariantCulture, arguments); +} +Date._parse = function Date$_parse(value, cultureInfo, args) { + var i, l, date, format, formats, custom = false; + for (i = 1, l = args.length; i < l; i++) { + format = args[i]; + if (format) { + custom = true; + date = Date._parseExact(value, format, cultureInfo); + if (date) return date; + } + } + if (! custom) { + formats = cultureInfo._getDateTimeFormats(); + for (i = 0, l = formats.length; i < l; i++) { + date = Date._parseExact(value, formats[i], cultureInfo); + if (date) return date; + } + } + return null; +} +Date._parseExact = function Date$_parseExact(value, format, cultureInfo) { + value = value.trim(); + var dtf = cultureInfo.dateTimeFormat, + parseInfo = Date._getParseRegExp(dtf, format), + match = new RegExp(parseInfo.regExp).exec(value); + if (match === null) return null; + + var groups = parseInfo.groups, + era = null, year = null, month = null, date = null, weekDay = null, + hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null, + pmHour = false; + for (var j = 0, jl = groups.length; j < jl; j++) { + var matchGroup = match[j+1]; + if (matchGroup) { + switch (groups[j]) { + case 'dd': case 'd': + date = parseInt(matchGroup, 10); + if ((date < 1) || (date > 31)) return null; + break; + case 'MMMM': + month = cultureInfo._getMonthIndex(matchGroup); + if ((month < 0) || (month > 11)) return null; + break; + case 'MMM': + month = cultureInfo._getAbbrMonthIndex(matchGroup); + if ((month < 0) || (month > 11)) return null; + break; + case 'M': case 'MM': + month = parseInt(matchGroup, 10) - 1; + if ((month < 0) || (month > 11)) return null; + break; + case 'y': case 'yy': + year = Date._expandYear(dtf,parseInt(matchGroup, 10)); + if ((year < 0) || (year > 9999)) return null; + break; + case 'yyyy': + year = parseInt(matchGroup, 10); + if ((year < 0) || (year > 9999)) return null; + break; + case 'h': case 'hh': + hour = parseInt(matchGroup, 10); + if (hour === 12) hour = 0; + if ((hour < 0) || (hour > 11)) return null; + break; + case 'H': case 'HH': + hour = parseInt(matchGroup, 10); + if ((hour < 0) || (hour > 23)) return null; + break; + case 'm': case 'mm': + min = parseInt(matchGroup, 10); + if ((min < 0) || (min > 59)) return null; + break; + case 's': case 'ss': + sec = parseInt(matchGroup, 10); + if ((sec < 0) || (sec > 59)) return null; + break; + case 'tt': case 't': + var upperToken = matchGroup.toUpperCase(); + pmHour = (upperToken === dtf.PMDesignator.toUpperCase()); + if (!pmHour && (upperToken !== dtf.AMDesignator.toUpperCase())) return null; + break; + case 'f': + msec = parseInt(matchGroup, 10) * 100; + if ((msec < 0) || (msec > 999)) return null; + break; + case 'ff': + msec = parseInt(matchGroup, 10) * 10; + if ((msec < 0) || (msec > 999)) return null; + break; + case 'fff': + msec = parseInt(matchGroup, 10); + if ((msec < 0) || (msec > 999)) return null; + break; + case 'dddd': + weekDay = cultureInfo._getDayIndex(matchGroup); + if ((weekDay < 0) || (weekDay > 6)) return null; + break; + case 'ddd': + weekDay = cultureInfo._getAbbrDayIndex(matchGroup); + if ((weekDay < 0) || (weekDay > 6)) return null; + break; + case 'zzz': + var offsets = matchGroup.split(/:/); + if (offsets.length !== 2) return null; + hourOffset = parseInt(offsets[0], 10); + if ((hourOffset < -12) || (hourOffset > 13)) return null; + var minOffset = parseInt(offsets[1], 10); + if ((minOffset < 0) || (minOffset > 59)) return null; + tzMinOffset = (hourOffset * 60) + (matchGroup.startsWith('-')? -minOffset : minOffset); + break; + case 'z': case 'zz': + hourOffset = parseInt(matchGroup, 10); + if ((hourOffset < -12) || (hourOffset > 13)) return null; + tzMinOffset = hourOffset * 60; + break; + case 'g': case 'gg': + var eraName = matchGroup; + if (!eraName || !dtf.eras) return null; + eraName = eraName.toLowerCase().trim(); + for (var i = 0, l = dtf.eras.length; i < l; i += 4) { + if (eraName === dtf.eras[i + 1].toLowerCase()) { + era = i; + break; + } + } + if (era === null) return null; + break; + } + } + } + var result = new Date(), defaults, convert = dtf.Calendar.convert; + if (convert) { + defaults = convert.fromGregorian(result); + } + if (!convert) { + defaults = [result.getFullYear(), result.getMonth(), result.getDate()]; + } + if (year === null) { + year = defaults[0]; + } + else if (dtf.eras) { + year += dtf.eras[(era || 0) + 3]; + } + if (month === null) { + month = defaults[1]; + } + if (date === null) { + date = defaults[2]; + } + if (convert) { + result = convert.toGregorian(year, month, date); + if (result === null) return null; + } + else { + result.setFullYear(year, month, date); + if (result.getDate() !== date) return null; + if ((weekDay !== null) && (result.getDay() !== weekDay)) { + return null; + } + } + if (pmHour && (hour < 12)) { + hour += 12; + } + result.setHours(hour, min, sec, msec); + if (tzMinOffset !== null) { + var adjustedMin = result.getMinutes() - (tzMinOffset + result.getTimezoneOffset()); + result.setHours(result.getHours() + parseInt(adjustedMin/60, 10), adjustedMin%60); + } + return result; +} +Date.prototype.format = function Date$format(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture); +} +Date.prototype.localeFormat = function Date$localeFormat(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture); +} +Date.prototype._toFormattedString = function Date$_toFormattedString(format, cultureInfo) { + var dtf = cultureInfo.dateTimeFormat, + convert = dtf.Calendar.convert; + if (!format || !format.length || (format === 'i')) { + if (cultureInfo && cultureInfo.name.length) { + if (convert) { + return this._toFormattedString(dtf.FullDateTimePattern, cultureInfo); + } + else { + var eraDate = new Date(this.getTime()); + var era = Date._getEra(this, dtf.eras); + eraDate.setFullYear(Date._getEraYear(this, dtf, era)); + return eraDate.toLocaleString(); + } + } + else { + return this.toString(); + } + } + var eras = dtf.eras, + sortable = (format === "s"); + format = Date._expandFormat(dtf, format); + var ret = new Sys.StringBuilder(); + var hour; + function addLeadingZero(num) { + if (num < 10) { + return '0' + num; + } + return num.toString(); + } + function addLeadingZeros(num) { + if (num < 10) { + return '00' + num; + } + if (num < 100) { + return '0' + num; + } + return num.toString(); + } + function padYear(year) { + if (year < 10) { + return '000' + year; + } + else if (year < 100) { + return '00' + year; + } + else if (year < 1000) { + return '0' + year; + } + return year.toString(); + } + + var foundDay, checkedDay, dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g; + function hasDay() { + if (foundDay || checkedDay) { + return foundDay; + } + foundDay = dayPartRegExp.test(format); + checkedDay = true; + return foundDay; + } + + var quoteCount = 0, + tokenRegExp = Date._getTokenRegExp(), + converted; + if (!sortable && convert) { + converted = convert.fromGregorian(this); + } + for (;;) { + var index = tokenRegExp.lastIndex; + var ar = tokenRegExp.exec(format); + var preMatch = format.slice(index, ar ? ar.index : format.length); + quoteCount += Date._appendPreOrPostMatch(preMatch, ret); + if (!ar) break; + if ((quoteCount%2) === 1) { + ret.append(ar[0]); + continue; + } + + function getPart(date, part) { + if (converted) { + return converted[part]; + } + switch (part) { + case 0: return date.getFullYear(); + case 1: return date.getMonth(); + case 2: return date.getDate(); + } + } + switch (ar[0]) { + case "dddd": + ret.append(dtf.DayNames[this.getDay()]); + break; + case "ddd": + ret.append(dtf.AbbreviatedDayNames[this.getDay()]); + break; + case "dd": + foundDay = true; + ret.append(addLeadingZero(getPart(this, 2))); + break; + case "d": + foundDay = true; + ret.append(getPart(this, 2)); + break; + case "MMMM": + ret.append((dtf.MonthGenitiveNames && hasDay()) + ? dtf.MonthGenitiveNames[getPart(this, 1)] + : dtf.MonthNames[getPart(this, 1)]); + break; + case "MMM": + ret.append((dtf.AbbreviatedMonthGenitiveNames && hasDay()) + ? dtf.AbbreviatedMonthGenitiveNames[getPart(this, 1)] + : dtf.AbbreviatedMonthNames[getPart(this, 1)]); + break; + case "MM": + ret.append(addLeadingZero(getPart(this, 1) + 1)); + break; + case "M": + ret.append(getPart(this, 1) + 1); + break; + case "yyyy": + ret.append(padYear(converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable))); + break; + case "yy": + ret.append(addLeadingZero((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100)); + break; + case "y": + ret.append((converted ? converted[0] : Date._getEraYear(this, dtf, Date._getEra(this, eras), sortable)) % 100); + break; + case "hh": + hour = this.getHours() % 12; + if (hour === 0) hour = 12; + ret.append(addLeadingZero(hour)); + break; + case "h": + hour = this.getHours() % 12; + if (hour === 0) hour = 12; + ret.append(hour); + break; + case "HH": + ret.append(addLeadingZero(this.getHours())); + break; + case "H": + ret.append(this.getHours()); + break; + case "mm": + ret.append(addLeadingZero(this.getMinutes())); + break; + case "m": + ret.append(this.getMinutes()); + break; + case "ss": + ret.append(addLeadingZero(this.getSeconds())); + break; + case "s": + ret.append(this.getSeconds()); + break; + case "tt": + ret.append((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator); + break; + case "t": + ret.append(((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0)); + break; + case "f": + ret.append(addLeadingZeros(this.getMilliseconds()).charAt(0)); + break; + case "ff": + ret.append(addLeadingZeros(this.getMilliseconds()).substr(0, 2)); + break; + case "fff": + ret.append(addLeadingZeros(this.getMilliseconds())); + break; + case "z": + hour = this.getTimezoneOffset() / 60; + ret.append(((hour <= 0) ? '+' : '-') + Math.floor(Math.abs(hour))); + break; + case "zz": + hour = this.getTimezoneOffset() / 60; + ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour)))); + break; + case "zzz": + hour = this.getTimezoneOffset() / 60; + ret.append(((hour <= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) + + ":" + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60))); + break; + case "g": + case "gg": + if (dtf.eras) { + ret.append(dtf.eras[Date._getEra(this, eras) + 1]); + } + break; + case "/": + ret.append(dtf.DateSeparator); + break; + default: + Sys.Debug.fail("Invalid date format pattern"); + } + } + return ret.toString(); +} +String.localeFormat = function String$localeFormat(format, args) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String}, + {name: "args", mayBeNull: true, parameterArray: true} + ]); + if (e) throw e; + return String._toFormattedString(true, arguments); +} +Number.parseLocale = function Number$parseLocale(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ], false); + if (e) throw e; + return Number._parse(value, Sys.CultureInfo.CurrentCulture); +} +Number.parseInvariant = function Number$parseInvariant(value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ], false); + if (e) throw e; + return Number._parse(value, Sys.CultureInfo.InvariantCulture); +} +Number._parse = function Number$_parse(value, cultureInfo) { + value = value.trim(); + + if (value.match(/^[+-]?infinity$/i)) { + return parseFloat(value); + } + if (value.match(/^0x[a-f0-9]+$/i)) { + return parseInt(value); + } + var numFormat = cultureInfo.numberFormat; + var signInfo = Number._parseNumberNegativePattern(value, numFormat, numFormat.NumberNegativePattern); + var sign = signInfo[0]; + var num = signInfo[1]; + + if ((sign === '') && (numFormat.NumberNegativePattern !== 1)) { + signInfo = Number._parseNumberNegativePattern(value, numFormat, 1); + sign = signInfo[0]; + num = signInfo[1]; + } + if (sign === '') sign = '+'; + + var exponent; + var intAndFraction; + var exponentPos = num.indexOf('e'); + if (exponentPos < 0) exponentPos = num.indexOf('E'); + if (exponentPos < 0) { + intAndFraction = num; + exponent = null; + } + else { + intAndFraction = num.substr(0, exponentPos); + exponent = num.substr(exponentPos + 1); + } + + var integer; + var fraction; + var decimalPos = intAndFraction.indexOf(numFormat.NumberDecimalSeparator); + if (decimalPos < 0) { + integer = intAndFraction; + fraction = null; + } + else { + integer = intAndFraction.substr(0, decimalPos); + fraction = intAndFraction.substr(decimalPos + numFormat.NumberDecimalSeparator.length); + } + + integer = integer.split(numFormat.NumberGroupSeparator).join(''); + var altNumGroupSeparator = numFormat.NumberGroupSeparator.replace(/\u00A0/g, " "); + if (numFormat.NumberGroupSeparator !== altNumGroupSeparator) { + integer = integer.split(altNumGroupSeparator).join(''); + } + + var p = sign + integer; + if (fraction !== null) { + p += '.' + fraction; + } + if (exponent !== null) { + var expSignInfo = Number._parseNumberNegativePattern(exponent, numFormat, 1); + if (expSignInfo[0] === '') { + expSignInfo[0] = '+'; + } + p += 'e' + expSignInfo[0] + expSignInfo[1]; + } + if (p.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/)) { + return parseFloat(p); + } + return Number.NaN; +} +Number._parseNumberNegativePattern = function Number$_parseNumberNegativePattern(value, numFormat, numberNegativePattern) { + var neg = numFormat.NegativeSign; + var pos = numFormat.PositiveSign; + switch (numberNegativePattern) { + case 4: + neg = ' ' + neg; + pos = ' ' + pos; + case 3: + if (value.endsWith(neg)) { + return ['-', value.substr(0, value.length - neg.length)]; + } + else if (value.endsWith(pos)) { + return ['+', value.substr(0, value.length - pos.length)]; + } + break; + case 2: + neg += ' '; + pos += ' '; + case 1: + if (value.startsWith(neg)) { + return ['-', value.substr(neg.length)]; + } + else if (value.startsWith(pos)) { + return ['+', value.substr(pos.length)]; + } + break; + case 0: + if (value.startsWith('(') && value.endsWith(')')) { + return ['-', value.substr(1, value.length - 2)]; + } + break; + default: + Sys.Debug.fail(""); + } + return ['', value]; +} +Number.prototype.format = function Number$format(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.InvariantCulture); +} +Number.prototype.localeFormat = function Number$localeFormat(format) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "format", type: String} + ]); + if (e) throw e; + return this._toFormattedString(format, Sys.CultureInfo.CurrentCulture); +} +Number.prototype._toFormattedString = function Number$_toFormattedString(format, cultureInfo) { + if (!format || (format.length === 0) || (format === 'i')) { + if (cultureInfo && (cultureInfo.name.length > 0)) { + return this.toLocaleString(); + } + else { + return this.toString(); + } + } + + var _percentPositivePattern = ["n %", "n%", "%n" ]; + var _percentNegativePattern = ["-n %", "-n%", "-%n"]; + var _numberNegativePattern = ["(n)","-n","- n","n-","n -"]; + var _currencyPositivePattern = ["$n","n$","$ n","n $"]; + var _currencyNegativePattern = ["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"]; + function zeroPad(str, count, left) { + for (var l=str.length; l < count; l++) { + str = (left ? ('0' + str) : (str + '0')); + } + return str; + } + + function expandNumber(number, precision, groupSizes, sep, decimalChar) { + Sys.Debug.assert(groupSizes.length > 0, "groupSizes must be an array of at least 1"); + var curSize = groupSizes[0]; + var curGroupIndex = 1; + var factor = Math.pow(10, precision); + var rounded = (Math.round(number * factor) / factor); + if (!isFinite(rounded)) { + rounded = number; + } + number = rounded; + + var numberString = number.toString(); + var right = ""; + var exponent; + + + var split = numberString.split(/e/i); + numberString = split[0]; + exponent = (split.length > 1 ? parseInt(split[1]) : 0); + split = numberString.split('.'); + numberString = split[0]; + right = split.length > 1 ? split[1] : ""; + + var l; + if (exponent > 0) { + right = zeroPad(right, exponent, false); + numberString += right.slice(0, exponent); + right = right.substr(exponent); + } + else if (exponent < 0) { + exponent = -exponent; + numberString = zeroPad(numberString, exponent+1, true); + right = numberString.slice(-exponent, numberString.length) + right; + numberString = numberString.slice(0, -exponent); + } + if (precision > 0) { + if (right.length > precision) { + right = right.slice(0, precision); + } + else { + right = zeroPad(right, precision, false); + } + right = decimalChar + right; + } + else { + right = ""; + } + var stringIndex = numberString.length-1; + var ret = ""; + while (stringIndex >= 0) { + if (curSize === 0 || curSize > stringIndex) { + if (ret.length > 0) + return numberString.slice(0, stringIndex + 1) + sep + ret + right; + else + return numberString.slice(0, stringIndex + 1) + right; + } + if (ret.length > 0) + ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1) + sep + ret; + else + ret = numberString.slice(stringIndex - curSize + 1, stringIndex+1); + stringIndex -= curSize; + if (curGroupIndex < groupSizes.length) { + curSize = groupSizes[curGroupIndex]; + curGroupIndex++; + } + } + return numberString.slice(0, stringIndex + 1) + sep + ret + right; + } + var nf = cultureInfo.numberFormat; + var number = Math.abs(this); + if (!format) + format = "D"; + var precision = -1; + if (format.length > 1) precision = parseInt(format.slice(1), 10); + var pattern; + switch (format.charAt(0)) { + case "d": + case "D": + pattern = 'n'; + if (precision !== -1) { + number = zeroPad(""+number, precision, true); + } + if (this < 0) number = -number; + break; + case "c": + case "C": + if (this < 0) pattern = _currencyNegativePattern[nf.CurrencyNegativePattern]; + else pattern = _currencyPositivePattern[nf.CurrencyPositivePattern]; + if (precision === -1) precision = nf.CurrencyDecimalDigits; + number = expandNumber(Math.abs(this), precision, nf.CurrencyGroupSizes, nf.CurrencyGroupSeparator, nf.CurrencyDecimalSeparator); + break; + case "n": + case "N": + if (this < 0) pattern = _numberNegativePattern[nf.NumberNegativePattern]; + else pattern = 'n'; + if (precision === -1) precision = nf.NumberDecimalDigits; + number = expandNumber(Math.abs(this), precision, nf.NumberGroupSizes, nf.NumberGroupSeparator, nf.NumberDecimalSeparator); + break; + case "p": + case "P": + if (this < 0) pattern = _percentNegativePattern[nf.PercentNegativePattern]; + else pattern = _percentPositivePattern[nf.PercentPositivePattern]; + if (precision === -1) precision = nf.PercentDecimalDigits; + number = expandNumber(Math.abs(this) * 100, precision, nf.PercentGroupSizes, nf.PercentGroupSeparator, nf.PercentDecimalSeparator); + break; + default: + throw Error.format(Sys.Res.formatBadFormatSpecifier); + } + var regex = /n|\$|-|%/g; + var ret = ""; + for (;;) { + var index = regex.lastIndex; + var ar = regex.exec(pattern); + ret += pattern.slice(index, ar ? ar.index : pattern.length); + if (!ar) + break; + switch (ar[0]) { + case "n": + ret += number; + break; + case "$": + ret += nf.CurrencySymbol; + break; + case "-": + if (/[1-9]/.test(number)) { + ret += nf.NegativeSign; + } + break; + case "%": + ret += nf.PercentSymbol; + break; + default: + Sys.Debug.fail("Invalid number format pattern"); + } + } + return ret; +} + +Sys.CultureInfo = function Sys$CultureInfo(name, numberFormat, dateTimeFormat) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "name", type: String}, + {name: "numberFormat", type: Object}, + {name: "dateTimeFormat", type: Object} + ]); + if (e) throw e; + this.name = name; + this.numberFormat = numberFormat; + this.dateTimeFormat = dateTimeFormat; +} + function Sys$CultureInfo$_getDateTimeFormats() { + if (! this._dateTimeFormats) { + var dtf = this.dateTimeFormat; + this._dateTimeFormats = + [ dtf.MonthDayPattern, + dtf.YearMonthPattern, + dtf.ShortDatePattern, + dtf.ShortTimePattern, + dtf.LongDatePattern, + dtf.LongTimePattern, + dtf.FullDateTimePattern, + dtf.RFC1123Pattern, + dtf.SortableDateTimePattern, + dtf.UniversalSortableDateTimePattern ]; + } + return this._dateTimeFormats; + } + function Sys$CultureInfo$_getIndex(value, a1, a2) { + var upper = this._toUpper(value), + i = Array.indexOf(a1, upper); + if (i === -1) { + i = Array.indexOf(a2, upper); + } + return i; + } + function Sys$CultureInfo$_getMonthIndex(value) { + if (!this._upperMonths) { + this._upperMonths = this._toUpperArray(this.dateTimeFormat.MonthNames); + this._upperMonthsGenitive = this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames); + } + return this._getIndex(value, this._upperMonths, this._upperMonthsGenitive); + } + function Sys$CultureInfo$_getAbbrMonthIndex(value) { + if (!this._upperAbbrMonths) { + this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames); + this._upperAbbrMonthsGenitive = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames); + } + return this._getIndex(value, this._upperAbbrMonths, this._upperAbbrMonthsGenitive); + } + function Sys$CultureInfo$_getDayIndex(value) { + if (!this._upperDays) { + this._upperDays = this._toUpperArray(this.dateTimeFormat.DayNames); + } + return Array.indexOf(this._upperDays, this._toUpper(value)); + } + function Sys$CultureInfo$_getAbbrDayIndex(value) { + if (!this._upperAbbrDays) { + this._upperAbbrDays = this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames); + } + return Array.indexOf(this._upperAbbrDays, this._toUpper(value)); + } + function Sys$CultureInfo$_toUpperArray(arr) { + var result = []; + for (var i = 0, il = arr.length; i < il; i++) { + result[i] = this._toUpper(arr[i]); + } + return result; + } + function Sys$CultureInfo$_toUpper(value) { + return value.split("\u00A0").join(' ').toUpperCase(); + } +Sys.CultureInfo.prototype = { + _getDateTimeFormats: Sys$CultureInfo$_getDateTimeFormats, + _getIndex: Sys$CultureInfo$_getIndex, + _getMonthIndex: Sys$CultureInfo$_getMonthIndex, + _getAbbrMonthIndex: Sys$CultureInfo$_getAbbrMonthIndex, + _getDayIndex: Sys$CultureInfo$_getDayIndex, + _getAbbrDayIndex: Sys$CultureInfo$_getAbbrDayIndex, + _toUpperArray: Sys$CultureInfo$_toUpperArray, + _toUpper: Sys$CultureInfo$_toUpper +} +Sys.CultureInfo.registerClass('Sys.CultureInfo'); +Sys.CultureInfo._parse = function Sys$CultureInfo$_parse(value) { + var dtf = value.dateTimeFormat; + if (dtf && !dtf.eras) { + dtf.eras = value.eras; + } + return new Sys.CultureInfo(value.name, value.numberFormat, dtf); +} +Sys.CultureInfo.InvariantCulture = Sys.CultureInfo._parse({"name":"","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"\u00A4","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]}); +if (typeof(__cultureInfo) === "object") { + Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(__cultureInfo); + delete __cultureInfo; +} +else { + Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse({"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]},"eras":[1,"A.D.",null,0]}); +} +Type.registerNamespace('Sys.Serialization'); +Sys.Serialization.JavaScriptSerializer = function Sys$Serialization$JavaScriptSerializer() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); +} +Sys.Serialization.JavaScriptSerializer.registerClass('Sys.Serialization.JavaScriptSerializer'); +Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs = []; +Sys.Serialization.JavaScriptSerializer._charsToEscape = []; +Sys.Serialization.JavaScriptSerializer._dateRegEx = new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"', 'g'); +Sys.Serialization.JavaScriptSerializer._escapeChars = {}; +Sys.Serialization.JavaScriptSerializer._escapeRegEx = new RegExp('["\\\\\\x00-\\x1F]', 'i'); +Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal = new RegExp('["\\\\\\x00-\\x1F]', 'g'); +Sys.Serialization.JavaScriptSerializer._jsonRegEx = new RegExp('[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]', 'g'); +Sys.Serialization.JavaScriptSerializer._jsonStringRegEx = new RegExp('"(\\\\.|[^"\\\\])*"', 'g'); +Sys.Serialization.JavaScriptSerializer._serverTypeFieldName = '__type'; +Sys.Serialization.JavaScriptSerializer._init = function Sys$Serialization$JavaScriptSerializer$_init() { + var replaceChars = ['\\u0000','\\u0001','\\u0002','\\u0003','\\u0004','\\u0005','\\u0006','\\u0007', + '\\b','\\t','\\n','\\u000b','\\f','\\r','\\u000e','\\u000f','\\u0010','\\u0011', + '\\u0012','\\u0013','\\u0014','\\u0015','\\u0016','\\u0017','\\u0018','\\u0019', + '\\u001a','\\u001b','\\u001c','\\u001d','\\u001e','\\u001f']; + Sys.Serialization.JavaScriptSerializer._charsToEscape[0] = '\\'; + Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['\\'] = new RegExp('\\\\', 'g'); + Sys.Serialization.JavaScriptSerializer._escapeChars['\\'] = '\\\\'; + Sys.Serialization.JavaScriptSerializer._charsToEscape[1] = '"'; + Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"'] = new RegExp('"', 'g'); + Sys.Serialization.JavaScriptSerializer._escapeChars['"'] = '\\"'; + for (var i = 0; i < 32; i++) { + var c = String.fromCharCode(i); + Sys.Serialization.JavaScriptSerializer._charsToEscape[i+2] = c; + Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c] = new RegExp(c, 'g'); + Sys.Serialization.JavaScriptSerializer._escapeChars[c] = replaceChars[i]; + } +} +Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeBooleanWithBuilder(object, stringBuilder) { + stringBuilder.append(object.toString()); +} +Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeNumberWithBuilder(object, stringBuilder) { + if (isFinite(object)) { + stringBuilder.append(String(object)); + } + else { + throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers); + } +} +Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeStringWithBuilder(string, stringBuilder) { + stringBuilder.append('"'); + if (Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(string)) { + if (Sys.Serialization.JavaScriptSerializer._charsToEscape.length === 0) { + Sys.Serialization.JavaScriptSerializer._init(); + } + if (string.length < 128) { + string = string.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal, + function(x) { return Sys.Serialization.JavaScriptSerializer._escapeChars[x]; }); + } + else { + for (var i = 0; i < 34; i++) { + var c = Sys.Serialization.JavaScriptSerializer._charsToEscape[i]; + if (string.indexOf(c) !== -1) { + if (Sys.Browser.agent === Sys.Browser.Opera || Sys.Browser.agent === Sys.Browser.FireFox) { + string = string.split(c).join(Sys.Serialization.JavaScriptSerializer._escapeChars[c]); + } + else { + string = string.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[c], + Sys.Serialization.JavaScriptSerializer._escapeChars[c]); + } + } + } + } + } + stringBuilder.append(string); + stringBuilder.append('"'); +} +Sys.Serialization.JavaScriptSerializer._serializeWithBuilder = function Sys$Serialization$JavaScriptSerializer$_serializeWithBuilder(object, stringBuilder, sort, prevObjects) { + var i; + switch (typeof object) { + case 'object': + if (object) { + if (prevObjects){ + for( var j = 0; j < prevObjects.length; j++) { + if (prevObjects[j] === object) { + throw Error.invalidOperation(Sys.Res.cannotSerializeObjectWithCycle); + } + } + } + else { + prevObjects = new Array(); + } + try { + Array.add(prevObjects, object); + + if (Number.isInstanceOfType(object)){ + Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(object, stringBuilder); + } + else if (Boolean.isInstanceOfType(object)){ + Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(object, stringBuilder); + } + else if (String.isInstanceOfType(object)){ + Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(object, stringBuilder); + } + + else if (Array.isInstanceOfType(object)) { + stringBuilder.append('['); + + for (i = 0; i < object.length; ++i) { + if (i > 0) { + stringBuilder.append(','); + } + Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object[i], stringBuilder,false,prevObjects); + } + stringBuilder.append(']'); + } + else { + if (Date.isInstanceOfType(object)) { + stringBuilder.append('"\\/Date('); + stringBuilder.append(object.getTime()); + stringBuilder.append(')\\/"'); + break; + } + var properties = []; + var propertyCount = 0; + for (var name in object) { + if (name.startsWith('$')) { + continue; + } + if (name === Sys.Serialization.JavaScriptSerializer._serverTypeFieldName && propertyCount !== 0){ + properties[propertyCount++] = properties[0]; + properties[0] = name; + } + else{ + properties[propertyCount++] = name; + } + } + if (sort) properties.sort(); + stringBuilder.append('{'); + var needComma = false; + + for (i=0; i + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", mayBeNull: true} + ]); + if (e) throw e; + var stringBuilder = new Sys.StringBuilder(); + Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(object, stringBuilder, false); + return stringBuilder.toString(); +} +Sys.Serialization.JavaScriptSerializer.deserialize = function Sys$Serialization$JavaScriptSerializer$deserialize(data, secure) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "data", type: String}, + {name: "secure", type: Boolean, optional: true} + ]); + if (e) throw e; + + if (data.length === 0) throw Error.argument('data', Sys.Res.cannotDeserializeEmptyString); + try { + var exp = data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx, "$1new Date($2)"); + + if (secure && Sys.Serialization.JavaScriptSerializer._jsonRegEx.test( + exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx, ''))) throw null; + return eval('(' + exp + ')'); + } + catch (e) { + throw Error.argument('data', Sys.Res.cannotDeserializeInvalidJson); + } +} +Type.registerNamespace('Sys.UI'); + +Sys.EventHandlerList = function Sys$EventHandlerList() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._list = {}; +} + function Sys$EventHandlerList$_addHandler(id, handler) { + Array.add(this._getEvent(id, true), handler); + } + function Sys$EventHandlerList$addHandler(id, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + this._addHandler(id, handler); + } + function Sys$EventHandlerList$_removeHandler(id, handler) { + var evt = this._getEvent(id); + if (!evt) return; + Array.remove(evt, handler); + } + function Sys$EventHandlerList$removeHandler(id, handler) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + this._removeHandler(id, handler); + } + function Sys$EventHandlerList$getHandler(id) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String} + ]); + if (e) throw e; + var evt = this._getEvent(id); + if (!evt || (evt.length === 0)) return null; + evt = Array.clone(evt); + return function(source, args) { + for (var i = 0, l = evt.length; i < l; i++) { + evt[i](source, args); + } + }; + } + function Sys$EventHandlerList$_getEvent(id, create) { + if (!this._list[id]) { + if (!create) return null; + this._list[id] = []; + } + return this._list[id]; + } +Sys.EventHandlerList.prototype = { + _addHandler: Sys$EventHandlerList$_addHandler, + addHandler: Sys$EventHandlerList$addHandler, + _removeHandler: Sys$EventHandlerList$_removeHandler, + removeHandler: Sys$EventHandlerList$removeHandler, + getHandler: Sys$EventHandlerList$getHandler, + _getEvent: Sys$EventHandlerList$_getEvent +} +Sys.EventHandlerList.registerClass('Sys.EventHandlerList'); +Sys.CommandEventArgs = function Sys$CommandEventArgs(commandName, commandArgument, commandSource) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "commandName", type: String}, + {name: "commandArgument", mayBeNull: true}, + {name: "commandSource", mayBeNull: true} + ]); + if (e) throw e; + Sys.CommandEventArgs.initializeBase(this); + this._commandName = commandName; + this._commandArgument = commandArgument; + this._commandSource = commandSource; +} + function Sys$CommandEventArgs$get_commandName() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._commandName; + } + function Sys$CommandEventArgs$get_commandArgument() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._commandArgument; + } + function Sys$CommandEventArgs$get_commandSource() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._commandSource; + } +Sys.CommandEventArgs.prototype = { + _commandName: null, + _commandArgument: null, + _commandSource: null, + get_commandName: Sys$CommandEventArgs$get_commandName, + get_commandArgument: Sys$CommandEventArgs$get_commandArgument, + get_commandSource: Sys$CommandEventArgs$get_commandSource +} +Sys.CommandEventArgs.registerClass("Sys.CommandEventArgs", Sys.CancelEventArgs); + +Sys.INotifyPropertyChange = function Sys$INotifyPropertyChange() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} + function Sys$INotifyPropertyChange$add_propertyChanged(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$INotifyPropertyChange$remove_propertyChanged(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } +Sys.INotifyPropertyChange.prototype = { + add_propertyChanged: Sys$INotifyPropertyChange$add_propertyChanged, + remove_propertyChanged: Sys$INotifyPropertyChange$remove_propertyChanged +} +Sys.INotifyPropertyChange.registerInterface('Sys.INotifyPropertyChange'); + +Sys.PropertyChangedEventArgs = function Sys$PropertyChangedEventArgs(propertyName) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "propertyName", type: String} + ]); + if (e) throw e; + Sys.PropertyChangedEventArgs.initializeBase(this); + this._propertyName = propertyName; +} + + function Sys$PropertyChangedEventArgs$get_propertyName() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._propertyName; + } +Sys.PropertyChangedEventArgs.prototype = { + get_propertyName: Sys$PropertyChangedEventArgs$get_propertyName +} +Sys.PropertyChangedEventArgs.registerClass('Sys.PropertyChangedEventArgs', Sys.EventArgs); + +Sys.INotifyDisposing = function Sys$INotifyDisposing() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} + function Sys$INotifyDisposing$add_disposing(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$INotifyDisposing$remove_disposing(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + throw Error.notImplemented(); + } +Sys.INotifyDisposing.prototype = { + add_disposing: Sys$INotifyDisposing$add_disposing, + remove_disposing: Sys$INotifyDisposing$remove_disposing +} +Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing"); + +Sys.Component = function Sys$Component() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (Sys.Application) Sys.Application.registerDisposableObject(this); +} + function Sys$Component$get_events() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._events) { + this._events = new Sys.EventHandlerList(); + } + return this._events; + } + function Sys$Component$get_id() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._id; + } + function Sys$Component$set_id(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + if (this._idSet) throw Error.invalidOperation(Sys.Res.componentCantSetIdTwice); + this._idSet = true; + var oldId = this.get_id(); + if (oldId && Sys.Application.findComponent(oldId)) throw Error.invalidOperation(Sys.Res.componentCantSetIdAfterAddedToApp); + this._id = value; + } + function Sys$Component$get_isInitialized() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._initialized; + } + function Sys$Component$get_isUpdating() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._updating; + } + function Sys$Component$add_disposing(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("disposing", handler); + } + function Sys$Component$remove_disposing(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("disposing", handler); + } + function Sys$Component$add_propertyChanged(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("propertyChanged", handler); + } + function Sys$Component$remove_propertyChanged(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("propertyChanged", handler); + } + function Sys$Component$beginUpdate() { + this._updating = true; + } + function Sys$Component$dispose() { + if (this._events) { + var handler = this._events.getHandler("disposing"); + if (handler) { + handler(this, Sys.EventArgs.Empty); + } + } + delete this._events; + Sys.Application.unregisterDisposableObject(this); + Sys.Application.removeComponent(this); + } + function Sys$Component$endUpdate() { + this._updating = false; + if (!this._initialized) this.initialize(); + this.updated(); + } + function Sys$Component$initialize() { + this._initialized = true; + } + function Sys$Component$raisePropertyChanged(propertyName) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "propertyName", type: String} + ]); + if (e) throw e; + if (!this._events) return; + var handler = this._events.getHandler("propertyChanged"); + if (handler) { + handler(this, new Sys.PropertyChangedEventArgs(propertyName)); + } + } + function Sys$Component$updated() { + } +Sys.Component.prototype = { + _id: null, + _idSet: false, + _initialized: false, + _updating: false, + get_events: Sys$Component$get_events, + get_id: Sys$Component$get_id, + set_id: Sys$Component$set_id, + get_isInitialized: Sys$Component$get_isInitialized, + get_isUpdating: Sys$Component$get_isUpdating, + add_disposing: Sys$Component$add_disposing, + remove_disposing: Sys$Component$remove_disposing, + add_propertyChanged: Sys$Component$add_propertyChanged, + remove_propertyChanged: Sys$Component$remove_propertyChanged, + beginUpdate: Sys$Component$beginUpdate, + dispose: Sys$Component$dispose, + endUpdate: Sys$Component$endUpdate, + initialize: Sys$Component$initialize, + raisePropertyChanged: Sys$Component$raisePropertyChanged, + updated: Sys$Component$updated +} +Sys.Component.registerClass('Sys.Component', null, Sys.IDisposable, Sys.INotifyPropertyChange, Sys.INotifyDisposing); +function Sys$Component$_setProperties(target, properties) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "target"}, + {name: "properties"} + ]); + if (e) throw e; + var current; + var targetType = Object.getType(target); + var isObject = (targetType === Object) || (targetType === Sys.UI.DomElement); + var isComponent = Sys.Component.isInstanceOfType(target) && !target.get_isUpdating(); + if (isComponent) target.beginUpdate(); + for (var name in properties) { + var val = properties[name]; + var getter = isObject ? null : target["get_" + name]; + if (isObject || typeof(getter) !== 'function') { + var targetVal = target[name]; + if (!isObject && typeof(targetVal) === 'undefined') throw Error.invalidOperation(String.format(Sys.Res.propertyUndefined, name)); + if (!val || (typeof(val) !== 'object') || (isObject && !targetVal)) { + target[name] = val; + } + else { + Sys$Component$_setProperties(targetVal, val); + } + } + else { + var setter = target["set_" + name]; + if (typeof(setter) === 'function') { + setter.apply(target, [val]); + } + else if (val instanceof Array) { + current = getter.apply(target); + if (!(current instanceof Array)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNotAnArray, name)); + for (var i = 0, j = current.length, l= val.length; i < l; i++, j++) { + current[j] = val[i]; + } + } + else if ((typeof(val) === 'object') && (Object.getType(val) === Object)) { + current = getter.apply(target); + if ((typeof(current) === 'undefined') || (current === null)) throw new Error.invalidOperation(String.format(Sys.Res.propertyNullOrUndefined, name)); + Sys$Component$_setProperties(current, val); + } + else { + throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name)); + } + } + } + if (isComponent) target.endUpdate(); +} +function Sys$Component$_setReferences(component, references) { + for (var name in references) { + var setter = component["set_" + name]; + var reference = $find(references[name]); + if (typeof(setter) !== 'function') throw new Error.invalidOperation(String.format(Sys.Res.propertyNotWritable, name)); + if (!reference) throw Error.invalidOperation(String.format(Sys.Res.referenceNotFound, references[name])); + setter.apply(component, [reference]); + } +} +var $create = Sys.Component.create = function Sys$Component$create(type, properties, events, references, element) { + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "type", type: Type}, + {name: "properties", mayBeNull: true, optional: true}, + {name: "events", mayBeNull: true, optional: true}, + {name: "references", mayBeNull: true, optional: true}, + {name: "element", mayBeNull: true, domElement: true, optional: true} + ]); + if (e) throw e; + if (!type.inheritsFrom(Sys.Component)) { + throw Error.argument('type', String.format(Sys.Res.createNotComponent, type.getName())); + } + if (type.inheritsFrom(Sys.UI.Behavior) || type.inheritsFrom(Sys.UI.Control)) { + if (!element) throw Error.argument('element', Sys.Res.createNoDom); + } + else if (element) throw Error.argument('element', Sys.Res.createComponentOnDom); + var component = (element ? new type(element): new type()); + var app = Sys.Application; + var creatingComponents = app.get_isCreatingComponents(); + component.beginUpdate(); + if (properties) { + Sys$Component$_setProperties(component, properties); + } + if (events) { + for (var name in events) { + if (!(component["add_" + name] instanceof Function)) throw new Error.invalidOperation(String.format(Sys.Res.undefinedEvent, name)); + if (!(events[name] instanceof Function)) throw new Error.invalidOperation(Sys.Res.eventHandlerNotFunction); + component["add_" + name](events[name]); + } + } + if (component.get_id()) { + app.addComponent(component); + } + if (creatingComponents) { + app._createdComponents[app._createdComponents.length] = component; + if (references) { + app._addComponentToSecondPass(component, references); + } + else { + component.endUpdate(); + } + } + else { + if (references) { + Sys$Component$_setReferences(component, references); + } + component.endUpdate(); + } + return component; +} + +Sys.UI.MouseButton = function Sys$UI$MouseButton() { + /// + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.MouseButton.prototype = { + leftButton: 0, + middleButton: 1, + rightButton: 2 +} +Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton"); + +Sys.UI.Key = function Sys$UI$Key() { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.Key.prototype = { + backspace: 8, + tab: 9, + enter: 13, + esc: 27, + space: 32, + pageUp: 33, + pageDown: 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40, + del: 127 +} +Sys.UI.Key.registerEnum("Sys.UI.Key"); + +Sys.UI.Point = function Sys$UI$Point(x, y) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "x", type: Number, integer: true}, + {name: "y", type: Number, integer: true} + ]); + if (e) throw e; + this.x = x; + this.y = y; +} +Sys.UI.Point.registerClass('Sys.UI.Point'); + +Sys.UI.Bounds = function Sys$UI$Bounds(x, y, width, height) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "x", type: Number, integer: true}, + {name: "y", type: Number, integer: true}, + {name: "width", type: Number, integer: true}, + {name: "height", type: Number, integer: true} + ]); + if (e) throw e; + this.x = x; + this.y = y; + this.height = height; + this.width = width; +} +Sys.UI.Bounds.registerClass('Sys.UI.Bounds'); + +Sys.UI.DomEvent = function Sys$UI$DomEvent(eventObject) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventObject"} + ]); + if (e) throw e; + var ev = eventObject; + var etype = this.type = ev.type.toLowerCase(); + this.rawEvent = ev; + this.altKey = ev.altKey; + if (typeof(ev.button) !== 'undefined') { + this.button = (typeof(ev.which) !== 'undefined') ? ev.button : + (ev.button === 4) ? Sys.UI.MouseButton.middleButton : + (ev.button === 2) ? Sys.UI.MouseButton.rightButton : + Sys.UI.MouseButton.leftButton; + } + if (etype === 'keypress') { + this.charCode = ev.charCode || ev.keyCode; + } + else if (ev.keyCode && (ev.keyCode === 46)) { + this.keyCode = 127; + } + else { + this.keyCode = ev.keyCode; + } + this.clientX = ev.clientX; + this.clientY = ev.clientY; + this.ctrlKey = ev.ctrlKey; + this.target = ev.target ? ev.target : ev.srcElement; + if (!etype.startsWith('key')) { + if ((typeof(ev.offsetX) !== 'undefined') && (typeof(ev.offsetY) !== 'undefined')) { + this.offsetX = ev.offsetX; + this.offsetY = ev.offsetY; + } + else if (this.target && (this.target.nodeType !== 3) && (typeof(ev.clientX) === 'number')) { + var loc = Sys.UI.DomElement.getLocation(this.target); + var w = Sys.UI.DomElement._getWindow(this.target); + this.offsetX = (w.pageXOffset || 0) + ev.clientX - loc.x; + this.offsetY = (w.pageYOffset || 0) + ev.clientY - loc.y; + } + } + this.screenX = ev.screenX; + this.screenY = ev.screenY; + this.shiftKey = ev.shiftKey; +} + function Sys$UI$DomEvent$preventDefault() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this.rawEvent.preventDefault) { + this.rawEvent.preventDefault(); + } + else if (window.event) { + this.rawEvent.returnValue = false; + } + } + function Sys$UI$DomEvent$stopPropagation() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this.rawEvent.stopPropagation) { + this.rawEvent.stopPropagation(); + } + else if (window.event) { + this.rawEvent.cancelBubble = true; + } + } +Sys.UI.DomEvent.prototype = { + preventDefault: Sys$UI$DomEvent$preventDefault, + stopPropagation: Sys$UI$DomEvent$stopPropagation +} +Sys.UI.DomEvent.registerClass('Sys.UI.DomEvent'); +var $addHandler = Sys.UI.DomEvent.addHandler = function Sys$UI$DomEvent$addHandler(element, eventName, handler, autoRemove) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "eventName", type: String}, + {name: "handler", type: Function}, + {name: "autoRemove", type: Boolean, optional: true} + ]); + if (e) throw e; + Sys.UI.DomEvent._ensureDomNode(element); + if (eventName === "error") throw Error.invalidOperation(Sys.Res.addHandlerCantBeUsedForError); + if (!element._events) { + element._events = {}; + } + var eventCache = element._events[eventName]; + if (!eventCache) { + element._events[eventName] = eventCache = []; + } + var browserHandler; + if (element.addEventListener) { + browserHandler = function(e) { + return handler.call(element, new Sys.UI.DomEvent(e)); + } + element.addEventListener(eventName, browserHandler, false); + } + else if (element.attachEvent) { + browserHandler = function() { + var e = {}; + try {e = Sys.UI.DomElement._getWindow(element).event} catch(ex) {} + return handler.call(element, new Sys.UI.DomEvent(e)); + } + element.attachEvent('on' + eventName, browserHandler); + } + eventCache[eventCache.length] = {handler: handler, browserHandler: browserHandler, autoRemove: autoRemove }; + if (autoRemove) { + var d = element.dispose; + if (d !== Sys.UI.DomEvent._disposeHandlers) { + element.dispose = Sys.UI.DomEvent._disposeHandlers; + if (typeof(d) !== "undefined") { + element._chainDispose = d; + } + } + } +} +var $addHandlers = Sys.UI.DomEvent.addHandlers = function Sys$UI$DomEvent$addHandlers(element, events, handlerOwner, autoRemove) { + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "events", type: Object}, + {name: "handlerOwner", optional: true}, + {name: "autoRemove", type: Boolean, optional: true} + ]); + if (e) throw e; + Sys.UI.DomEvent._ensureDomNode(element); + for (var name in events) { + var handler = events[name]; + if (typeof(handler) !== 'function') throw Error.invalidOperation(Sys.Res.cantAddNonFunctionhandler); + if (handlerOwner) { + handler = Function.createDelegate(handlerOwner, handler); + } + $addHandler(element, name, handler, autoRemove || false); + } +} +var $clearHandlers = Sys.UI.DomEvent.clearHandlers = function Sys$UI$DomEvent$clearHandlers(element) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"} + ]); + if (e) throw e; + Sys.UI.DomEvent._ensureDomNode(element); + Sys.UI.DomEvent._clearHandlers(element, false); +} +Sys.UI.DomEvent._clearHandlers = function Sys$UI$DomEvent$_clearHandlers(element, autoRemoving) { + if (element._events) { + var cache = element._events; + for (var name in cache) { + var handlers = cache[name]; + for (var i = handlers.length - 1; i >= 0; i--) { + var entry = handlers[i]; + if (!autoRemoving || entry.autoRemove) { + $removeHandler(element, name, entry.handler); + } + } + } + element._events = null; + } +} +Sys.UI.DomEvent._disposeHandlers = function Sys$UI$DomEvent$_disposeHandlers() { + Sys.UI.DomEvent._clearHandlers(this, true); + var d = this._chainDispose, type = typeof(d); + if (type !== "undefined") { + this.dispose = d; + this._chainDispose = null; + if (type === "function") { + this.dispose(); + } + } +} +var $removeHandler = Sys.UI.DomEvent.removeHandler = function Sys$UI$DomEvent$removeHandler(element, eventName, handler) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "eventName", type: String}, + {name: "handler", type: Function} + ]); + if (e) throw e; + Sys.UI.DomEvent._removeHandler(element, eventName, handler); +} +Sys.UI.DomEvent._removeHandler = function Sys$UI$DomEvent$_removeHandler(element, eventName, handler) { + Sys.UI.DomEvent._ensureDomNode(element); + var browserHandler = null; + if ((typeof(element._events) !== 'object') || !element._events) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); + var cache = element._events[eventName]; + if (!(cache instanceof Array)) throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); + for (var i = 0, l = cache.length; i < l; i++) { + if (cache[i].handler === handler) { + browserHandler = cache[i].browserHandler; + break; + } + } + if (typeof(browserHandler) !== 'function') throw Error.invalidOperation(Sys.Res.eventHandlerInvalid); + if (element.removeEventListener) { + element.removeEventListener(eventName, browserHandler, false); + } + else if (element.detachEvent) { + element.detachEvent('on' + eventName, browserHandler); + } + cache.splice(i, 1); +} +Sys.UI.DomEvent._ensureDomNode = function Sys$UI$DomEvent$_ensureDomNode(element) { + if (element.tagName && (element.tagName.toUpperCase() === "SCRIPT")) return; + + var doc = element.ownerDocument || element.document || element; + if ((typeof(element.document) !== 'object') && (element != doc) && (typeof(element.nodeType) !== 'number')) { + throw Error.argument("element", Sys.Res.argumentDomNode); + } +} + +Sys.UI.DomElement = function Sys$UI$DomElement() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.DomElement.registerClass('Sys.UI.DomElement'); +Sys.UI.DomElement.addCssClass = function Sys$UI$DomElement$addCssClass(element, className) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + if (!Sys.UI.DomElement.containsCssClass(element, className)) { + if (element.className === '') { + element.className = className; + } + else { + element.className += ' ' + className; + } + } +} +Sys.UI.DomElement.containsCssClass = function Sys$UI$DomElement$containsCssClass(element, className) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + return Array.contains(element.className.split(' '), className); +} +Sys.UI.DomElement.getBounds = function Sys$UI$DomElement$getBounds(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + var offset = Sys.UI.DomElement.getLocation(element); + return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0); +} +var $get = Sys.UI.DomElement.getElementById = function Sys$UI$DomElement$getElementById(id, element) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "element", mayBeNull: true, domElement: true, optional: true} + ]); + if (e) throw e; + if (!element) return document.getElementById(id); + if (element.getElementById) return element.getElementById(id); + var nodeQueue = []; + var childNodes = element.childNodes; + for (var i = 0; i < childNodes.length; i++) { + var node = childNodes[i]; + if (node.nodeType == 1) { + nodeQueue[nodeQueue.length] = node; + } + } + while (nodeQueue.length) { + node = nodeQueue.shift(); + if (node.id == id) { + return node; + } + childNodes = node.childNodes; + for (i = 0; i < childNodes.length; i++) { + node = childNodes[i]; + if (node.nodeType == 1) { + nodeQueue[nodeQueue.length] = node; + } + } + } + return null; +} +if (document.documentElement.getBoundingClientRect) { + Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if (element.self || element.nodeType === 9) return new Sys.UI.Point(0,0); + var clientRect = element.getBoundingClientRect(); + if (!clientRect) { + return new Sys.UI.Point(0,0); + } + var documentElement = element.ownerDocument.documentElement, + offsetX = Math.floor(clientRect.left + 0.5) + documentElement.scrollLeft, + offsetY = Math.floor(clientRect.top + 0.5) + documentElement.scrollTop; + if (Sys.Browser.agent === Sys.Browser.InternetExplorer) { + try { + var f = element.ownerDocument.parentWindow.frameElement || null; + if (f) { + var offset = (f.frameBorder === "0" || f.frameBorder === "no") ? 2 : 0; + offsetX += offset; + offsetY += offset; + } + } + catch(ex) { + } + if (Sys.Browser.version <= 7) { + + var multiplier, before, rect, d = document.createElement("div"); + d.style.cssText = "position:absolute !important;left:0px !important;right:0px !important;height:0px !important;width:1px !important;display:hidden !important"; + try { + before = document.body.childNodes[0]; + document.body.insertBefore(d, before); + rect = d.getBoundingClientRect(); + document.body.removeChild(d); + multiplier = (rect.right - rect.left); + } + catch (e) { + } + if (multiplier && (multiplier !== 1)) { + offsetX = Math.floor(offsetX / multiplier); + offsetY = Math.floor(offsetY / multiplier); + } + } + if ((document.documentMode || 0) < 8) { + offsetX -= 2; + offsetY -= 2; + } + } + return new Sys.UI.Point(offsetX, offsetY); + } +} +else if (Sys.Browser.agent === Sys.Browser.Safari) { + Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0); + var offsetX = 0, offsetY = 0, + parent, + previous = null, + previousStyle = null, + currentStyle; + for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) { + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + var tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + if ((parent.offsetLeft || parent.offsetTop) && + ((tagName !== "BODY") || (!previousStyle || previousStyle.position !== "absolute"))) { + offsetX += parent.offsetLeft; + offsetY += parent.offsetTop; + } + if (previous && Sys.Browser.version >= 3) { + offsetX += parseInt(currentStyle.borderLeftWidth); + offsetY += parseInt(currentStyle.borderTopWidth); + } + } + currentStyle = Sys.UI.DomElement._getCurrentStyle(element); + var elementPosition = currentStyle ? currentStyle.position : null; + if (!elementPosition || (elementPosition !== "absolute")) { + for (parent = element.parentNode; parent; parent = parent.parentNode) { + tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) { + offsetX -= (parent.scrollLeft || 0); + offsetY -= (parent.scrollTop || 0); + } + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + var parentPosition = currentStyle ? currentStyle.position : null; + if (parentPosition && (parentPosition === "absolute")) break; + } + } + return new Sys.UI.Point(offsetX, offsetY); + } +} +else { + Sys.UI.DomElement.getLocation = function Sys$UI$DomElement$getLocation(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if ((element.window && (element.window === element)) || element.nodeType === 9) return new Sys.UI.Point(0,0); + var offsetX = 0, offsetY = 0, + parent, + previous = null, + previousStyle = null, + currentStyle = null; + for (parent = element; parent; previous = parent, previousStyle = currentStyle, parent = parent.offsetParent) { + var tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + if ((parent.offsetLeft || parent.offsetTop) && + !((tagName === "BODY") && + (!previousStyle || previousStyle.position !== "absolute"))) { + offsetX += parent.offsetLeft; + offsetY += parent.offsetTop; + } + if (previous !== null && currentStyle) { + if ((tagName !== "TABLE") && (tagName !== "TD") && (tagName !== "HTML")) { + offsetX += parseInt(currentStyle.borderLeftWidth) || 0; + offsetY += parseInt(currentStyle.borderTopWidth) || 0; + } + if (tagName === "TABLE" && + (currentStyle.position === "relative" || currentStyle.position === "absolute")) { + offsetX += parseInt(currentStyle.marginLeft) || 0; + offsetY += parseInt(currentStyle.marginTop) || 0; + } + } + } + currentStyle = Sys.UI.DomElement._getCurrentStyle(element); + var elementPosition = currentStyle ? currentStyle.position : null; + if (!elementPosition || (elementPosition !== "absolute")) { + for (parent = element.parentNode; parent; parent = parent.parentNode) { + tagName = parent.tagName ? parent.tagName.toUpperCase() : null; + if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop)) { + offsetX -= (parent.scrollLeft || 0); + offsetY -= (parent.scrollTop || 0); + currentStyle = Sys.UI.DomElement._getCurrentStyle(parent); + if (currentStyle) { + offsetX += parseInt(currentStyle.borderLeftWidth) || 0; + offsetY += parseInt(currentStyle.borderTopWidth) || 0; + } + } + } + } + return new Sys.UI.Point(offsetX, offsetY); + } +} +Sys.UI.DomElement.isDomElement = function Sys$UI$DomElement$isDomElement(obj) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "obj"} + ]); + if (e) throw e; + return Sys._isDomElement(obj); +} +Sys.UI.DomElement.removeCssClass = function Sys$UI$DomElement$removeCssClass(element, className) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + var currentClassName = ' ' + element.className + ' '; + var index = currentClassName.indexOf(' ' + className + ' '); + if (index >= 0) { + element.className = (currentClassName.substr(0, index) + ' ' + + currentClassName.substring(index + className.length + 1, currentClassName.length)).trim(); + } +} +Sys.UI.DomElement.resolveElement = function Sys$UI$DomElement$resolveElement(elementOrElementId, containerElement) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "elementOrElementId", mayBeNull: true}, + {name: "containerElement", mayBeNull: true, domElement: true, optional: true} + ]); + if (e) throw e; + var el = elementOrElementId; + if (!el) return null; + if (typeof(el) === "string") { + el = Sys.UI.DomElement.getElementById(el, containerElement); + if (!el) { + throw Error.argument("elementOrElementId", String.format(Sys.Res.elementNotFound, elementOrElementId)); + } + } + else if(!Sys.UI.DomElement.isDomElement(el)) { + throw Error.argument("elementOrElementId", Sys.Res.expectedElementOrId); + } + return el; +} +Sys.UI.DomElement.raiseBubbleEvent = function Sys$UI$DomElement$raiseBubbleEvent(source, args) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "source", domElement: true}, + {name: "args", type: Sys.EventArgs} + ]); + if (e) throw e; + var target = source; + while (target) { + var control = target.control; + if (control && control.onBubbleEvent && control.raiseBubbleEvent) { + Sys.UI.DomElement._raiseBubbleEventFromControl(control, source, args); + return; + } + target = target.parentNode; + } +} +Sys.UI.DomElement._raiseBubbleEventFromControl = function Sys$UI$DomElement$_raiseBubbleEventFromControl(control, source, args) { + if (!control.onBubbleEvent(source, args)) { + control._raiseBubbleEvent(source, args); + } +} +Sys.UI.DomElement.setLocation = function Sys$UI$DomElement$setLocation(element, x, y) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "x", type: Number, integer: true}, + {name: "y", type: Number, integer: true} + ]); + if (e) throw e; + var style = element.style; + style.position = 'absolute'; + style.left = x + "px"; + style.top = y + "px"; +} +Sys.UI.DomElement.toggleCssClass = function Sys$UI$DomElement$toggleCssClass(element, className) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "className", type: String} + ]); + if (e) throw e; + if (Sys.UI.DomElement.containsCssClass(element, className)) { + Sys.UI.DomElement.removeCssClass(element, className); + } + else { + Sys.UI.DomElement.addCssClass(element, className); + } +} +Sys.UI.DomElement.getVisibilityMode = function Sys$UI$DomElement$getVisibilityMode(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + return (element._visibilityMode === Sys.UI.VisibilityMode.hide) ? + Sys.UI.VisibilityMode.hide : + Sys.UI.VisibilityMode.collapse; +} +Sys.UI.DomElement.setVisibilityMode = function Sys$UI$DomElement$setVisibilityMode(element, value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "value", type: Sys.UI.VisibilityMode} + ]); + if (e) throw e; + Sys.UI.DomElement._ensureOldDisplayMode(element); + if (element._visibilityMode !== value) { + element._visibilityMode = value; + if (Sys.UI.DomElement.getVisible(element) === false) { + if (element._visibilityMode === Sys.UI.VisibilityMode.hide) { + element.style.display = element._oldDisplayMode; + } + else { + element.style.display = 'none'; + } + } + element._visibilityMode = value; + } +} +Sys.UI.DomElement.getVisible = function Sys$UI$DomElement$getVisible(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element); + if (!style) return true; + return (style.visibility !== 'hidden') && (style.display !== 'none'); +} +Sys.UI.DomElement.setVisible = function Sys$UI$DomElement$setVisible(element, value) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "value", type: Boolean} + ]); + if (e) throw e; + if (value !== Sys.UI.DomElement.getVisible(element)) { + Sys.UI.DomElement._ensureOldDisplayMode(element); + element.style.visibility = value ? 'visible' : 'hidden'; + if (value || (element._visibilityMode === Sys.UI.VisibilityMode.hide)) { + element.style.display = element._oldDisplayMode; + } + else { + element.style.display = 'none'; + } + } +} +Sys.UI.DomElement._ensureOldDisplayMode = function Sys$UI$DomElement$_ensureOldDisplayMode(element) { + if (!element._oldDisplayMode) { + var style = element.currentStyle || Sys.UI.DomElement._getCurrentStyle(element); + element._oldDisplayMode = style ? style.display : null; + if (!element._oldDisplayMode || element._oldDisplayMode === 'none') { + switch(element.tagName.toUpperCase()) { + case 'DIV': case 'P': case 'ADDRESS': case 'BLOCKQUOTE': case 'BODY': case 'COL': + case 'COLGROUP': case 'DD': case 'DL': case 'DT': case 'FIELDSET': case 'FORM': + case 'H1': case 'H2': case 'H3': case 'H4': case 'H5': case 'H6': case 'HR': + case 'IFRAME': case 'LEGEND': case 'OL': case 'PRE': case 'TABLE': case 'TD': + case 'TH': case 'TR': case 'UL': + element._oldDisplayMode = 'block'; + break; + case 'LI': + element._oldDisplayMode = 'list-item'; + break; + default: + element._oldDisplayMode = 'inline'; + } + } + } +} +Sys.UI.DomElement._getWindow = function Sys$UI$DomElement$_getWindow(element) { + var doc = element.ownerDocument || element.document || element; + return doc.defaultView || doc.parentWindow; +} +Sys.UI.DomElement._getCurrentStyle = function Sys$UI$DomElement$_getCurrentStyle(element) { + if (element.nodeType === 3) return null; + var w = Sys.UI.DomElement._getWindow(element); + if (element.documentElement) element = element.documentElement; + var computedStyle = (w && (element !== w) && w.getComputedStyle) ? + w.getComputedStyle(element, null) : + element.currentStyle || element.style; + if (!computedStyle && (Sys.Browser.agent === Sys.Browser.Safari) && element.style) { + var oldDisplay = element.style.display; + var oldPosition = element.style.position; + element.style.position = 'absolute'; + element.style.display = 'block'; + var style = w.getComputedStyle(element, null); + element.style.display = oldDisplay; + element.style.position = oldPosition; + computedStyle = {}; + for (var n in style) { + computedStyle[n] = style[n]; + } + computedStyle.display = 'none'; + } + return computedStyle; +} + +Sys.IContainer = function Sys$IContainer() { + throw Error.notImplemented(); +} + function Sys$IContainer$addComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$IContainer$removeComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$IContainer$findComponent(id) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$IContainer$getComponents() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } +Sys.IContainer.prototype = { + addComponent: Sys$IContainer$addComponent, + removeComponent: Sys$IContainer$removeComponent, + findComponent: Sys$IContainer$findComponent, + getComponents: Sys$IContainer$getComponents +} +Sys.IContainer.registerInterface("Sys.IContainer"); + +Sys.ApplicationLoadEventArgs = function Sys$ApplicationLoadEventArgs(components, isPartialLoad) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "components", type: Array, elementType: Sys.Component}, + {name: "isPartialLoad", type: Boolean} + ]); + if (e) throw e; + Sys.ApplicationLoadEventArgs.initializeBase(this); + this._components = components; + this._isPartialLoad = isPartialLoad; +} + + function Sys$ApplicationLoadEventArgs$get_components() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._components; + } + function Sys$ApplicationLoadEventArgs$get_isPartialLoad() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._isPartialLoad; + } +Sys.ApplicationLoadEventArgs.prototype = { + get_components: Sys$ApplicationLoadEventArgs$get_components, + get_isPartialLoad: Sys$ApplicationLoadEventArgs$get_isPartialLoad +} +Sys.ApplicationLoadEventArgs.registerClass('Sys.ApplicationLoadEventArgs', Sys.EventArgs); + +Sys._Application = function Sys$_Application() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + Sys._Application.initializeBase(this); + this._disposableObjects = []; + this._components = {}; + this._createdComponents = []; + this._secondPassComponents = []; + this._unloadHandlerDelegate = Function.createDelegate(this, this._unloadHandler); + Sys.UI.DomEvent.addHandler(window, "unload", this._unloadHandlerDelegate); + this._domReady(); +} + function Sys$_Application$get_isCreatingComponents() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._creatingComponents; + } + function Sys$_Application$get_isDisposing() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._disposing; + } + function Sys$_Application$add_init(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + if (this._initialized) { + handler(this, Sys.EventArgs.Empty); + } + else { + this.get_events().addHandler("init", handler); + } + } + function Sys$_Application$remove_init(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("init", handler); + } + function Sys$_Application$add_load(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("load", handler); + } + function Sys$_Application$remove_load(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("load", handler); + } + function Sys$_Application$add_unload(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().addHandler("unload", handler); + } + function Sys$_Application$remove_unload(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this.get_events().removeHandler("unload", handler); + } + function Sys$_Application$addComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + var id = component.get_id(); + if (!id) throw Error.invalidOperation(Sys.Res.cantAddWithoutId); + if (typeof(this._components[id]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.appDuplicateComponent, id)); + this._components[id] = component; + } + function Sys$_Application$beginCreateComponents() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._creatingComponents = true; + } + function Sys$_Application$dispose() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._disposing) { + this._disposing = true; + if (this._timerCookie) { + window.clearTimeout(this._timerCookie); + delete this._timerCookie; + } + if (this._endRequestHandler) { + Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler); + delete this._endRequestHandler; + } + if (this._beginRequestHandler) { + Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler); + delete this._beginRequestHandler; + } + if (window.pageUnload) { + window.pageUnload(this, Sys.EventArgs.Empty); + } + var unloadHandler = this.get_events().getHandler("unload"); + if (unloadHandler) { + unloadHandler(this, Sys.EventArgs.Empty); + } + var disposableObjects = Array.clone(this._disposableObjects); + for (var i = 0, l = disposableObjects.length; i < l; i++) { + var object = disposableObjects[i]; + if (typeof(object) !== "undefined") { + object.dispose(); + } + } + Array.clear(this._disposableObjects); + Sys.UI.DomEvent.removeHandler(window, "unload", this._unloadHandlerDelegate); + if (Sys._ScriptLoader) { + var sl = Sys._ScriptLoader.getInstance(); + if(sl) { + sl.dispose(); + } + } + Sys._Application.callBaseMethod(this, 'dispose'); + } + } + function Sys$_Application$disposeElement(element, childNodesOnly) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element"}, + {name: "childNodesOnly", type: Boolean} + ]); + if (e) throw e; + if (element.nodeType === 1) { + var children = element.getElementsByTagName("*"); + for (var i = children.length - 1; i >= 0; i--) { + this._disposeElementInternal(children[i]); + } + if (!childNodesOnly) { + this._disposeElementInternal(element); + } + } + } + function Sys$_Application$endCreateComponents() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var components = this._secondPassComponents; + for (var i = 0, l = components.length; i < l; i++) { + var component = components[i].component; + Sys$Component$_setReferences(component, components[i].references); + component.endUpdate(); + } + this._secondPassComponents = []; + this._creatingComponents = false; + } + function Sys$_Application$findComponent(id, parent) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "id", type: String}, + {name: "parent", mayBeNull: true, optional: true} + ]); + if (e) throw e; + return (parent ? + ((Sys.IContainer.isInstanceOfType(parent)) ? + parent.findComponent(id) : + parent[id] || null) : + Sys.Application._components[id] || null); + } + function Sys$_Application$getComponents() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var res = []; + var components = this._components; + for (var name in components) { + res[res.length] = components[name]; + } + return res; + } + function Sys$_Application$initialize() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if(!this.get_isInitialized() && !this._disposing) { + Sys._Application.callBaseMethod(this, 'initialize'); + this._raiseInit(); + if (this.get_stateString) { + if (Sys.WebForms && Sys.WebForms.PageRequestManager) { + this._beginRequestHandler = Function.createDelegate(this, this._onPageRequestManagerBeginRequest); + Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler); + this._endRequestHandler = Function.createDelegate(this, this._onPageRequestManagerEndRequest); + Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler); + } + var loadedEntry = this.get_stateString(); + if (loadedEntry !== this._currentEntry) { + this._navigate(loadedEntry); + } + else { + this._ensureHistory(); + } + } + this.raiseLoad(); + } + } + function Sys$_Application$notifyScriptLoaded() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + } + function Sys$_Application$registerDisposableObject(object) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", type: Sys.IDisposable} + ]); + if (e) throw e; + if (!this._disposing) { + var objects = this._disposableObjects, + i = objects.length; + objects[i] = object; + object.__msdisposeindex = i; + } + } + function Sys$_Application$raiseLoad() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var h = this.get_events().getHandler("load"); + var args = new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents), !!this._loaded); + this._loaded = true; + if (h) { + h(this, args); + } + if (window.pageLoad) { + window.pageLoad(this, args); + } + this._createdComponents = []; + } + function Sys$_Application$removeComponent(component) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "component", type: Sys.Component} + ]); + if (e) throw e; + var id = component.get_id(); + if (id) delete this._components[id]; + } + function Sys$_Application$unregisterDisposableObject(object) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "object", type: Sys.IDisposable} + ]); + if (e) throw e; + if (!this._disposing) { + var i = object.__msdisposeindex; + if (typeof(i) === "number") { + var disposableObjects = this._disposableObjects; + delete disposableObjects[i]; + delete object.__msdisposeindex; + if (++this._deleteCount > 1000) { + var newArray = []; + for (var j = 0, l = disposableObjects.length; j < l; j++) { + object = disposableObjects[j]; + if (typeof(object) !== "undefined") { + object.__msdisposeindex = newArray.length; + newArray.push(object); + } + } + this._disposableObjects = newArray; + this._deleteCount = 0; + } + } + } + } + function Sys$_Application$_addComponentToSecondPass(component, references) { + this._secondPassComponents[this._secondPassComponents.length] = {component: component, references: references}; + } + function Sys$_Application$_disposeComponents(list) { + if (list) { + for (var i = list.length - 1; i >= 0; i--) { + var item = list[i]; + if (typeof(item.dispose) === "function") { + item.dispose(); + } + } + } + } + function Sys$_Application$_disposeElementInternal(element) { + var d = element.dispose; + if (d && typeof(d) === "function") { + element.dispose(); + } + else { + var c = element.control; + if (c && typeof(c.dispose) === "function") { + c.dispose(); + } + } + var list = element._behaviors; + if (list) { + this._disposeComponents(list); + } + list = element._components; + if (list) { + this._disposeComponents(list); + element._components = null; + } + } + function Sys$_Application$_domReady() { + var check, er, app = this; + function init() { app.initialize(); } + var onload = function() { + Sys.UI.DomEvent.removeHandler(window, "load", onload); + init(); + } + Sys.UI.DomEvent.addHandler(window, "load", onload); + + if (document.addEventListener) { + try { + document.addEventListener("DOMContentLoaded", check = function() { + document.removeEventListener("DOMContentLoaded", check, false); + init(); + }, false); + } + catch (er) { } + } + else if (document.attachEvent) { + if ((window == window.top) && document.documentElement.doScroll) { + var timeout, el = document.createElement("div"); + check = function() { + try { + el.doScroll("left"); + } + catch (er) { + timeout = window.setTimeout(check, 0); + return; + } + el = null; + init(); + } + check(); + } + else { + document.attachEvent("onreadystatechange", check = function() { + if (document.readyState === "complete") { + document.detachEvent("onreadystatechange", check); + init(); + } + }); + } + } + } + function Sys$_Application$_raiseInit() { + var handler = this.get_events().getHandler("init"); + if (handler) { + this.beginCreateComponents(); + handler(this, Sys.EventArgs.Empty); + this.endCreateComponents(); + } + } + function Sys$_Application$_unloadHandler(event) { + this.dispose(); + } +Sys._Application.prototype = { + _creatingComponents: false, + _disposing: false, + _deleteCount: 0, + get_isCreatingComponents: Sys$_Application$get_isCreatingComponents, + get_isDisposing: Sys$_Application$get_isDisposing, + add_init: Sys$_Application$add_init, + remove_init: Sys$_Application$remove_init, + add_load: Sys$_Application$add_load, + remove_load: Sys$_Application$remove_load, + add_unload: Sys$_Application$add_unload, + remove_unload: Sys$_Application$remove_unload, + addComponent: Sys$_Application$addComponent, + beginCreateComponents: Sys$_Application$beginCreateComponents, + dispose: Sys$_Application$dispose, + disposeElement: Sys$_Application$disposeElement, + endCreateComponents: Sys$_Application$endCreateComponents, + findComponent: Sys$_Application$findComponent, + getComponents: Sys$_Application$getComponents, + initialize: Sys$_Application$initialize, + notifyScriptLoaded: Sys$_Application$notifyScriptLoaded, + registerDisposableObject: Sys$_Application$registerDisposableObject, + raiseLoad: Sys$_Application$raiseLoad, + removeComponent: Sys$_Application$removeComponent, + unregisterDisposableObject: Sys$_Application$unregisterDisposableObject, + _addComponentToSecondPass: Sys$_Application$_addComponentToSecondPass, + _disposeComponents: Sys$_Application$_disposeComponents, + _disposeElementInternal: Sys$_Application$_disposeElementInternal, + _domReady: Sys$_Application$_domReady, + _raiseInit: Sys$_Application$_raiseInit, + _unloadHandler: Sys$_Application$_unloadHandler +} +Sys._Application.registerClass('Sys._Application', Sys.Component, Sys.IContainer); +Sys.Application = new Sys._Application(); +var $find = Sys.Application.findComponent; + +Sys.UI.Behavior = function Sys$UI$Behavior(element) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + Sys.UI.Behavior.initializeBase(this); + this._element = element; + var behaviors = element._behaviors; + if (!behaviors) { + element._behaviors = [this]; + } + else { + behaviors[behaviors.length] = this; + } +} + function Sys$UI$Behavior$get_element() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._element; + } + function Sys$UI$Behavior$get_id() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var baseId = Sys.UI.Behavior.callBaseMethod(this, 'get_id'); + if (baseId) return baseId; + if (!this._element || !this._element.id) return ''; + return this._element.id + '$' + this.get_name(); + } + function Sys$UI$Behavior$get_name() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._name) return this._name; + var name = Object.getTypeName(this); + var i = name.lastIndexOf('.'); + if (i !== -1) name = name.substr(i + 1); + if (!this.get_isInitialized()) this._name = name; + return name; + } + function Sys$UI$Behavior$set_name(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + if ((value === '') || (value.charAt(0) === ' ') || (value.charAt(value.length - 1) === ' ')) + throw Error.argument('value', Sys.Res.invalidId); + if (typeof(this._element[value]) !== 'undefined') + throw Error.invalidOperation(String.format(Sys.Res.behaviorDuplicateName, value)); + if (this.get_isInitialized()) throw Error.invalidOperation(Sys.Res.cantSetNameAfterInit); + this._name = value; + } + function Sys$UI$Behavior$initialize() { + Sys.UI.Behavior.callBaseMethod(this, 'initialize'); + var name = this.get_name(); + if (name) this._element[name] = this; + } + function Sys$UI$Behavior$dispose() { + Sys.UI.Behavior.callBaseMethod(this, 'dispose'); + var e = this._element; + if (e) { + var name = this.get_name(); + if (name) { + e[name] = null; + } + var behaviors = e._behaviors; + Array.remove(behaviors, this); + if (behaviors.length === 0) { + e._behaviors = null; + } + delete this._element; + } + } +Sys.UI.Behavior.prototype = { + _name: null, + get_element: Sys$UI$Behavior$get_element, + get_id: Sys$UI$Behavior$get_id, + get_name: Sys$UI$Behavior$get_name, + set_name: Sys$UI$Behavior$set_name, + initialize: Sys$UI$Behavior$initialize, + dispose: Sys$UI$Behavior$dispose +} +Sys.UI.Behavior.registerClass('Sys.UI.Behavior', Sys.Component); +Sys.UI.Behavior.getBehaviorByName = function Sys$UI$Behavior$getBehaviorByName(element, name) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "name", type: String} + ]); + if (e) throw e; + var b = element[name]; + return (b && Sys.UI.Behavior.isInstanceOfType(b)) ? b : null; +} +Sys.UI.Behavior.getBehaviors = function Sys$UI$Behavior$getBehaviors(element) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if (!element._behaviors) return []; + return Array.clone(element._behaviors); +} +Sys.UI.Behavior.getBehaviorsByType = function Sys$UI$Behavior$getBehaviorsByType(element, type) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true}, + {name: "type", type: Type} + ]); + if (e) throw e; + var behaviors = element._behaviors; + var results = []; + if (behaviors) { + for (var i = 0, l = behaviors.length; i < l; i++) { + if (type.isInstanceOfType(behaviors[i])) { + results[results.length] = behaviors[i]; + } + } + } + return results; +} + +Sys.UI.VisibilityMode = function Sys$UI$VisibilityMode() { + /// + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); +} +Sys.UI.VisibilityMode.prototype = { + hide: 0, + collapse: 1 +} +Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode"); + +Sys.UI.Control = function Sys$UI$Control(element) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "element", domElement: true} + ]); + if (e) throw e; + if (typeof(element.control) !== 'undefined') throw Error.invalidOperation(Sys.Res.controlAlreadyDefined); + Sys.UI.Control.initializeBase(this); + this._element = element; + element.control = this; + var role = this.get_role(); + if (role) { + element.setAttribute("role", role); + } +} + function Sys$UI$Control$get_element() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._element; + } + function Sys$UI$Control$get_id() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._element) return ''; + return this._element.id; + } + function Sys$UI$Control$set_id(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + throw Error.invalidOperation(Sys.Res.cantSetId); + } + function Sys$UI$Control$get_parent() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._parent) return this._parent; + if (!this._element) return null; + + var parentElement = this._element.parentNode; + while (parentElement) { + if (parentElement.control) { + return parentElement.control; + } + parentElement = parentElement.parentNode; + } + return null; + } + function Sys$UI$Control$set_parent(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.Control}]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + var parents = [this]; + var current = value; + while (current) { + if (Array.contains(parents, current)) throw Error.invalidOperation(Sys.Res.circularParentChain); + parents[parents.length] = current; + current = current.get_parent(); + } + this._parent = value; + } + function Sys$UI$Control$get_role() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return null; + } + function Sys$UI$Control$get_visibilityMode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + return Sys.UI.DomElement.getVisibilityMode(this._element); + } + function Sys$UI$Control$set_visibilityMode(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Sys.UI.VisibilityMode}]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.setVisibilityMode(this._element, value); + } + function Sys$UI$Control$get_visible() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + return Sys.UI.DomElement.getVisible(this._element); + } + function Sys$UI$Control$set_visible(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.setVisible(this._element, value) + } + function Sys$UI$Control$addCssClass(className) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "className", type: String} + ]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.addCssClass(this._element, className); + } + function Sys$UI$Control$dispose() { + Sys.UI.Control.callBaseMethod(this, 'dispose'); + if (this._element) { + this._element.control = null; + delete this._element; + } + if (this._parent) delete this._parent; + } + function Sys$UI$Control$onBubbleEvent(source, args) { + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "source"}, + {name: "args", type: Sys.EventArgs} + ]); + if (e) throw e; + return false; + } + function Sys$UI$Control$raiseBubbleEvent(source, args) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "source"}, + {name: "args", type: Sys.EventArgs} + ]); + if (e) throw e; + this._raiseBubbleEvent(source, args); + } + function Sys$UI$Control$_raiseBubbleEvent(source, args) { + var currentTarget = this.get_parent(); + while (currentTarget) { + if (currentTarget.onBubbleEvent(source, args)) { + return; + } + currentTarget = currentTarget.get_parent(); + } + } + function Sys$UI$Control$removeCssClass(className) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "className", type: String} + ]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.removeCssClass(this._element, className); + } + function Sys$UI$Control$toggleCssClass(className) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "className", type: String} + ]); + if (e) throw e; + if (!this._element) throw Error.invalidOperation(Sys.Res.cantBeCalledAfterDispose); + Sys.UI.DomElement.toggleCssClass(this._element, className); + } +Sys.UI.Control.prototype = { + _parent: null, + _visibilityMode: Sys.UI.VisibilityMode.hide, + get_element: Sys$UI$Control$get_element, + get_id: Sys$UI$Control$get_id, + set_id: Sys$UI$Control$set_id, + get_parent: Sys$UI$Control$get_parent, + set_parent: Sys$UI$Control$set_parent, + get_role: Sys$UI$Control$get_role, + get_visibilityMode: Sys$UI$Control$get_visibilityMode, + set_visibilityMode: Sys$UI$Control$set_visibilityMode, + get_visible: Sys$UI$Control$get_visible, + set_visible: Sys$UI$Control$set_visible, + addCssClass: Sys$UI$Control$addCssClass, + dispose: Sys$UI$Control$dispose, + onBubbleEvent: Sys$UI$Control$onBubbleEvent, + raiseBubbleEvent: Sys$UI$Control$raiseBubbleEvent, + _raiseBubbleEvent: Sys$UI$Control$_raiseBubbleEvent, + removeCssClass: Sys$UI$Control$removeCssClass, + toggleCssClass: Sys$UI$Control$toggleCssClass +} +Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component); +Sys.HistoryEventArgs = function Sys$HistoryEventArgs(state) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "state", type: Object} + ]); + if (e) throw e; + Sys.HistoryEventArgs.initializeBase(this); + this._state = state; +} + function Sys$HistoryEventArgs$get_state() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._state; + } +Sys.HistoryEventArgs.prototype = { + get_state: Sys$HistoryEventArgs$get_state +} +Sys.HistoryEventArgs.registerClass('Sys.HistoryEventArgs', Sys.EventArgs); +Sys.Application._appLoadHandler = null; +Sys.Application._beginRequestHandler = null; +Sys.Application._clientId = null; +Sys.Application._currentEntry = ''; +Sys.Application._endRequestHandler = null; +Sys.Application._history = null; +Sys.Application._enableHistory = false; +Sys.Application._historyEnabledInScriptManager = false; +Sys.Application._historyFrame = null; +Sys.Application._historyInitialized = false; +Sys.Application._historyPointIsNew = false; +Sys.Application._ignoreTimer = false; +Sys.Application._initialState = null; +Sys.Application._state = {}; +Sys.Application._timerCookie = 0; +Sys.Application._timerHandler = null; +Sys.Application._uniqueId = null; +Sys._Application.prototype.get_stateString = function Sys$_Application$get_stateString() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + var hash = null; + + if (Sys.Browser.agent === Sys.Browser.Firefox) { + var href = window.location.href; + var hashIndex = href.indexOf('#'); + if (hashIndex !== -1) { + hash = href.substring(hashIndex + 1); + } + else { + hash = ""; + } + return hash; + } + else { + hash = window.location.hash; + } + + if ((hash.length > 0) && (hash.charAt(0) === '#')) { + hash = hash.substring(1); + } + return hash; +}; +Sys._Application.prototype.get_enableHistory = function Sys$_Application$get_enableHistory() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._enableHistory; +}; +Sys._Application.prototype.set_enableHistory = function Sys$_Application$set_enableHistory(value) { + if (this._initialized && !this._initializing) { + throw Error.invalidOperation(Sys.Res.historyCannotEnableHistory); + } + else if (this._historyEnabledInScriptManager && !value) { + throw Error.invalidOperation(Sys.Res.invalidHistorySettingCombination); + } + this._enableHistory = value; +}; +Sys._Application.prototype.add_navigate = function Sys$_Application$add_navigate(handler) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "handler", type: Function} + ]); + if (e) throw e; + this.get_events().addHandler("navigate", handler); +}; +Sys._Application.prototype.remove_navigate = function Sys$_Application$remove_navigate(handler) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "handler", type: Function} + ]); + if (e) throw e; + this.get_events().removeHandler("navigate", handler); +}; +Sys._Application.prototype.addHistoryPoint = function Sys$_Application$addHistoryPoint(state, title) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "state", type: Object}, + {name: "title", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + if (!this._enableHistory) throw Error.invalidOperation(Sys.Res.historyCannotAddHistoryPointWithHistoryDisabled); + for (var n in state) { + var v = state[n]; + var t = typeof(v); + if ((v !== null) && ((t === 'object') || (t === 'function') || (t === 'undefined'))) { + throw Error.argument('state', Sys.Res.stateMustBeStringDictionary); + } + } + this._ensureHistory(); + var initialState = this._state; + for (var key in state) { + var value = state[key]; + if (value === null) { + if (typeof(initialState[key]) !== 'undefined') { + delete initialState[key]; + } + } + else { + initialState[key] = value; + } + } + var entry = this._serializeState(initialState); + this._historyPointIsNew = true; + this._setState(entry, title); + this._raiseNavigate(); +}; +Sys._Application.prototype.setServerId = function Sys$_Application$setServerId(clientId, uniqueId) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "clientId", type: String}, + {name: "uniqueId", type: String} + ]); + if (e) throw e; + this._clientId = clientId; + this._uniqueId = uniqueId; +}; +Sys._Application.prototype.setServerState = function Sys$_Application$setServerState(value) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "value", type: String} + ]); + if (e) throw e; + this._ensureHistory(); + this._state.__s = value; + this._updateHiddenField(value); +}; +Sys._Application.prototype._deserializeState = function Sys$_Application$_deserializeState(entry) { + var result = {}; + entry = entry || ''; + var serverSeparator = entry.indexOf('&&'); + if ((serverSeparator !== -1) && (serverSeparator + 2 < entry.length)) { + result.__s = entry.substr(serverSeparator + 2); + entry = entry.substr(0, serverSeparator); + } + var tokens = entry.split('&'); + for (var i = 0, l = tokens.length; i < l; i++) { + var token = tokens[i]; + var equal = token.indexOf('='); + if ((equal !== -1) && (equal + 1 < token.length)) { + var name = token.substr(0, equal); + var value = token.substr(equal + 1); + result[name] = decodeURIComponent(value); + } + } + return result; +}; +Sys._Application.prototype._enableHistoryInScriptManager = function Sys$_Application$_enableHistoryInScriptManager() { + this._enableHistory = true; + this._historyEnabledInScriptManager = true; +}; +Sys._Application.prototype._ensureHistory = function Sys$_Application$_ensureHistory() { + if (!this._historyInitialized && this._enableHistory) { + if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.documentMode < 8)) { + this._historyFrame = document.getElementById('__historyFrame'); + if (!this._historyFrame) throw Error.invalidOperation(Sys.Res.historyMissingFrame); + this._ignoreIFrame = true; + } + this._timerHandler = Function.createDelegate(this, this._onIdle); + this._timerCookie = window.setTimeout(this._timerHandler, 100); + + try { + this._initialState = this._deserializeState(this.get_stateString()); + } catch(e) {} + + this._historyInitialized = true; + } +}; +Sys._Application.prototype._navigate = function Sys$_Application$_navigate(entry) { + this._ensureHistory(); + var state = this._deserializeState(entry); + + if (this._uniqueId) { + var oldServerEntry = this._state.__s || ''; + var newServerEntry = state.__s || ''; + if (newServerEntry !== oldServerEntry) { + this._updateHiddenField(newServerEntry); + __doPostBack(this._uniqueId, newServerEntry); + this._state = state; + return; + } + } + this._setState(entry); + this._state = state; + this._raiseNavigate(); +}; +Sys._Application.prototype._onIdle = function Sys$_Application$_onIdle() { + delete this._timerCookie; + + var entry = this.get_stateString(); + if (entry !== this._currentEntry) { + if (!this._ignoreTimer) { + this._historyPointIsNew = false; + this._navigate(entry); + } + } + else { + this._ignoreTimer = false; + } + this._timerCookie = window.setTimeout(this._timerHandler, 100); +}; +Sys._Application.prototype._onIFrameLoad = function Sys$_Application$_onIFrameLoad(entry) { + this._ensureHistory(); + if (!this._ignoreIFrame) { + this._historyPointIsNew = false; + this._navigate(entry); + } + this._ignoreIFrame = false; +}; +Sys._Application.prototype._onPageRequestManagerBeginRequest = function Sys$_Application$_onPageRequestManagerBeginRequest(sender, args) { + this._ignoreTimer = true; +}; +Sys._Application.prototype._onPageRequestManagerEndRequest = function Sys$_Application$_onPageRequestManagerEndRequest(sender, args) { + var dataItem = args.get_dataItems()[this._clientId]; + var eventTarget = document.getElementById("__EVENTTARGET"); + if (eventTarget && eventTarget.value === this._uniqueId) { + eventTarget.value = ''; + } + if (typeof(dataItem) !== 'undefined') { + this.setServerState(dataItem); + this._historyPointIsNew = true; + } + else { + this._ignoreTimer = false; + } + var entry = this._serializeState(this._state); + if (entry !== this._currentEntry) { + this._ignoreTimer = true; + this._setState(entry); + this._raiseNavigate(); + } +}; +Sys._Application.prototype._raiseNavigate = function Sys$_Application$_raiseNavigate() { + var h = this.get_events().getHandler("navigate"); + var stateClone = {}; + for (var key in this._state) { + if (key !== '__s') { + stateClone[key] = this._state[key]; + } + } + var args = new Sys.HistoryEventArgs(stateClone); + if (h) { + h(this, args); + } + var err; + try { + if ((Sys.Browser.agent === Sys.Browser.Firefox) && window.location.hash && + (!window.frameElement || window.top.location.hash)) { + window.history.go(0); + } + } + catch(err) { + } +}; +Sys._Application.prototype._serializeState = function Sys$_Application$_serializeState(state) { + var serialized = []; + for (var key in state) { + var value = state[key]; + if (key === '__s') { + var serverState = value; + } + else { + if (key.indexOf('=') !== -1) throw Error.argument('state', Sys.Res.stateFieldNameInvalid); + serialized[serialized.length] = key + '=' + encodeURIComponent(value); + } + } + return serialized.join('&') + (serverState ? '&&' + serverState : ''); +}; +Sys._Application.prototype._setState = function Sys$_Application$_setState(entry, title) { + if (this._enableHistory) { + entry = entry || ''; + if (entry !== this._currentEntry) { + if (window.theForm) { + var action = window.theForm.action; + var hashIndex = action.indexOf('#'); + window.theForm.action = ((hashIndex !== -1) ? action.substring(0, hashIndex) : action) + '#' + entry; + } + + if (this._historyFrame && this._historyPointIsNew) { + this._ignoreIFrame = true; + var frameDoc = this._historyFrame.contentWindow.document; + frameDoc.open("javascript:''"); + frameDoc.write("" + (title || document.title) + + "parent.Sys.Application._onIFrameLoad(" + + Sys.Serialization.JavaScriptSerializer.serialize(entry) + + ");"); + frameDoc.close(); + } + this._ignoreTimer = false; + this._currentEntry = entry; + if (this._historyFrame || this._historyPointIsNew) { + var currentHash = this.get_stateString(); + if (entry !== currentHash) { + var loc = document.location; + if (loc.href.length - loc.hash.length + entry.length > 1024) { + throw Error.invalidOperation(Sys.Res.urlMustBeLessThan1024chars); + } + window.location.hash = entry; + this._currentEntry = this.get_stateString(); + if ((typeof(title) !== 'undefined') && (title !== null)) { + document.title = title; + } + } + } + this._historyPointIsNew = false; + } + } +}; +Sys._Application.prototype._updateHiddenField = function Sys$_Application$_updateHiddenField(value) { + if (this._clientId) { + var serverStateField = document.getElementById(this._clientId); + if (serverStateField) { + serverStateField.value = value; + } + } +}; + +if (!window.XMLHttpRequest) { + window.XMLHttpRequest = function window$XMLHttpRequest() { + var progIDs = [ 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP' ]; + for (var i = 0, l = progIDs.length; i < l; i++) { + try { + return new ActiveXObject(progIDs[i]); + } + catch (ex) { + } + } + return null; + } +} +Type.registerNamespace('Sys.Net'); + +Sys.Net.WebRequestExecutor = function Sys$Net$WebRequestExecutor() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._webRequest = null; + this._resultObject = null; +} + function Sys$Net$WebRequestExecutor$get_webRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._webRequest; + } + function Sys$Net$WebRequestExecutor$_set_webRequest(value) { + if (this.get_started()) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'set_webRequest')); + } + this._webRequest = value; + } + function Sys$Net$WebRequestExecutor$get_started() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_responseAvailable() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_timedOut() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_aborted() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_responseData() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_statusCode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_statusText() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_xml() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$get_object() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._resultObject) { + this._resultObject = Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData()); + } + return this._resultObject; + } + function Sys$Net$WebRequestExecutor$executeRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$abort() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$getResponseHeader(header) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "header", type: String} + ]); + if (e) throw e; + throw Error.notImplemented(); + } + function Sys$Net$WebRequestExecutor$getAllResponseHeaders() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + throw Error.notImplemented(); + } +Sys.Net.WebRequestExecutor.prototype = { + get_webRequest: Sys$Net$WebRequestExecutor$get_webRequest, + _set_webRequest: Sys$Net$WebRequestExecutor$_set_webRequest, + get_started: Sys$Net$WebRequestExecutor$get_started, + get_responseAvailable: Sys$Net$WebRequestExecutor$get_responseAvailable, + get_timedOut: Sys$Net$WebRequestExecutor$get_timedOut, + get_aborted: Sys$Net$WebRequestExecutor$get_aborted, + get_responseData: Sys$Net$WebRequestExecutor$get_responseData, + get_statusCode: Sys$Net$WebRequestExecutor$get_statusCode, + get_statusText: Sys$Net$WebRequestExecutor$get_statusText, + get_xml: Sys$Net$WebRequestExecutor$get_xml, + get_object: Sys$Net$WebRequestExecutor$get_object, + executeRequest: Sys$Net$WebRequestExecutor$executeRequest, + abort: Sys$Net$WebRequestExecutor$abort, + getResponseHeader: Sys$Net$WebRequestExecutor$getResponseHeader, + getAllResponseHeaders: Sys$Net$WebRequestExecutor$getAllResponseHeaders +} +Sys.Net.WebRequestExecutor.registerClass('Sys.Net.WebRequestExecutor'); + +Sys.Net.XMLDOM = function Sys$Net$XMLDOM(markup) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "markup", type: String} + ]); + if (e) throw e; + if (!window.DOMParser) { + var progIDs = [ 'Msxml2.DOMDocument.3.0', 'Msxml2.DOMDocument' ]; + for (var i = 0, l = progIDs.length; i < l; i++) { + try { + var xmlDOM = new ActiveXObject(progIDs[i]); + xmlDOM.async = false; + xmlDOM.loadXML(markup); + xmlDOM.setProperty('SelectionLanguage', 'XPath'); + return xmlDOM; + } + catch (ex) { + } + } + } + else { + try { + var domParser = new window.DOMParser(); + return domParser.parseFromString(markup, 'text/xml'); + } + catch (ex) { + } + } + return null; +} +Sys.Net.XMLHttpExecutor = function Sys$Net$XMLHttpExecutor() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + Sys.Net.XMLHttpExecutor.initializeBase(this); + var _this = this; + this._xmlHttpRequest = null; + this._webRequest = null; + this._responseAvailable = false; + this._timedOut = false; + this._timer = null; + this._aborted = false; + this._started = false; + this._onReadyStateChange = (function () { + + if (_this._xmlHttpRequest.readyState === 4 ) { + try { + if (typeof(_this._xmlHttpRequest.status) === "undefined") { + return; + } + } + catch(ex) { + return; + } + + _this._clearTimer(); + _this._responseAvailable = true; + _this._webRequest.completed(Sys.EventArgs.Empty); + if (_this._xmlHttpRequest != null) { + _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; + _this._xmlHttpRequest = null; + } + } + }); + this._clearTimer = (function() { + if (_this._timer != null) { + window.clearTimeout(_this._timer); + _this._timer = null; + } + }); + this._onTimeout = (function() { + if (!_this._responseAvailable) { + _this._clearTimer(); + _this._timedOut = true; + _this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; + _this._xmlHttpRequest.abort(); + _this._webRequest.completed(Sys.EventArgs.Empty); + _this._xmlHttpRequest = null; + } + }); +} + function Sys$Net$XMLHttpExecutor$get_timedOut() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._timedOut; + } + function Sys$Net$XMLHttpExecutor$get_started() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._started; + } + function Sys$Net$XMLHttpExecutor$get_responseAvailable() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._responseAvailable; + } + function Sys$Net$XMLHttpExecutor$get_aborted() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._aborted; + } + function Sys$Net$XMLHttpExecutor$executeRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._webRequest = this.get_webRequest(); + if (this._started) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOnceStarted, 'executeRequest')); + } + if (this._webRequest === null) { + throw Error.invalidOperation(Sys.Res.nullWebRequest); + } + var body = this._webRequest.get_body(); + var headers = this._webRequest.get_headers(); + this._xmlHttpRequest = new XMLHttpRequest(); + this._xmlHttpRequest.onreadystatechange = this._onReadyStateChange; + var verb = this._webRequest.get_httpVerb(); + this._xmlHttpRequest.open(verb, this._webRequest.getResolvedUrl(), true ); + this._xmlHttpRequest.setRequestHeader("X-Requested-With", "XMLHttpRequest"); + if (headers) { + for (var header in headers) { + var val = headers[header]; + if (typeof(val) !== "function") + this._xmlHttpRequest.setRequestHeader(header, val); + } + } + if (verb.toLowerCase() === "post") { + if ((headers === null) || !headers['Content-Type']) { + this._xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8'); + } + if (!body) { + body = ""; + } + } + var timeout = this._webRequest.get_timeout(); + if (timeout > 0) { + this._timer = window.setTimeout(Function.createDelegate(this, this._onTimeout), timeout); + } + this._xmlHttpRequest.send(body); + this._started = true; + } + function Sys$Net$XMLHttpExecutor$getResponseHeader(header) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "header", type: String} + ]); + if (e) throw e; + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getResponseHeader')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getResponseHeader')); + } + var result; + try { + result = this._xmlHttpRequest.getResponseHeader(header); + } catch (e) { + } + if (!result) result = ""; + return result; + } + function Sys$Net$XMLHttpExecutor$getAllResponseHeaders() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'getAllResponseHeaders')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'getAllResponseHeaders')); + } + return this._xmlHttpRequest.getAllResponseHeaders(); + } + function Sys$Net$XMLHttpExecutor$get_responseData() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_responseData')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_responseData')); + } + return this._xmlHttpRequest.responseText; + } + function Sys$Net$XMLHttpExecutor$get_statusCode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusCode')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusCode')); + } + var result = 0; + try { + result = this._xmlHttpRequest.status; + } + catch(ex) { + } + return result; + } + function Sys$Net$XMLHttpExecutor$get_statusText() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_statusText')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_statusText')); + } + return this._xmlHttpRequest.statusText; + } + function Sys$Net$XMLHttpExecutor$get_xml() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._responseAvailable) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallBeforeResponse, 'get_xml')); + } + if (!this._xmlHttpRequest) { + throw Error.invalidOperation(String.format(Sys.Res.cannotCallOutsideHandler, 'get_xml')); + } + var xml = this._xmlHttpRequest.responseXML; + if (!xml || !xml.documentElement) { + xml = Sys.Net.XMLDOM(this._xmlHttpRequest.responseText); + if (!xml || !xml.documentElement) + return null; + } + else if (navigator.userAgent.indexOf('MSIE') !== -1) { + xml.setProperty('SelectionLanguage', 'XPath'); + } + if (xml.documentElement.namespaceURI === "http://www.mozilla.org/newlayout/xml/parsererror.xml" && + xml.documentElement.tagName === "parsererror") { + return null; + } + + if (xml.documentElement.firstChild && xml.documentElement.firstChild.tagName === "parsererror") { + return null; + } + + return xml; + } + function Sys$Net$XMLHttpExecutor$abort() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (!this._started) { + throw Error.invalidOperation(Sys.Res.cannotAbortBeforeStart); + } + if (this._aborted || this._responseAvailable || this._timedOut) + return; + this._aborted = true; + this._clearTimer(); + if (this._xmlHttpRequest && !this._responseAvailable) { + this._xmlHttpRequest.onreadystatechange = Function.emptyMethod; + this._xmlHttpRequest.abort(); + + this._xmlHttpRequest = null; + this._webRequest.completed(Sys.EventArgs.Empty); + } + } +Sys.Net.XMLHttpExecutor.prototype = { + get_timedOut: Sys$Net$XMLHttpExecutor$get_timedOut, + get_started: Sys$Net$XMLHttpExecutor$get_started, + get_responseAvailable: Sys$Net$XMLHttpExecutor$get_responseAvailable, + get_aborted: Sys$Net$XMLHttpExecutor$get_aborted, + executeRequest: Sys$Net$XMLHttpExecutor$executeRequest, + getResponseHeader: Sys$Net$XMLHttpExecutor$getResponseHeader, + getAllResponseHeaders: Sys$Net$XMLHttpExecutor$getAllResponseHeaders, + get_responseData: Sys$Net$XMLHttpExecutor$get_responseData, + get_statusCode: Sys$Net$XMLHttpExecutor$get_statusCode, + get_statusText: Sys$Net$XMLHttpExecutor$get_statusText, + get_xml: Sys$Net$XMLHttpExecutor$get_xml, + abort: Sys$Net$XMLHttpExecutor$abort +} +Sys.Net.XMLHttpExecutor.registerClass('Sys.Net.XMLHttpExecutor', Sys.Net.WebRequestExecutor); + +Sys.Net._WebRequestManager = function Sys$Net$_WebRequestManager() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._defaultTimeout = 0; + this._defaultExecutorType = "Sys.Net.XMLHttpExecutor"; +} + function Sys$Net$_WebRequestManager$add_invokingRequest(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().addHandler("invokingRequest", handler); + } + function Sys$Net$_WebRequestManager$remove_invokingRequest(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().removeHandler("invokingRequest", handler); + } + function Sys$Net$_WebRequestManager$add_completedRequest(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().addHandler("completedRequest", handler); + } + function Sys$Net$_WebRequestManager$remove_completedRequest(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().removeHandler("completedRequest", handler); + } + function Sys$Net$_WebRequestManager$_get_eventHandlerList() { + if (!this._events) { + this._events = new Sys.EventHandlerList(); + } + return this._events; + } + function Sys$Net$_WebRequestManager$get_defaultTimeout() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._defaultTimeout; + } + function Sys$Net$_WebRequestManager$set_defaultTimeout(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Number}]); + if (e) throw e; + if (value < 0) { + throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout); + } + this._defaultTimeout = value; + } + function Sys$Net$_WebRequestManager$get_defaultExecutorType() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._defaultExecutorType; + } + function Sys$Net$_WebRequestManager$set_defaultExecutorType(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._defaultExecutorType = value; + } + function Sys$Net$_WebRequestManager$executeRequest(webRequest) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "webRequest", type: Sys.Net.WebRequest} + ]); + if (e) throw e; + var executor = webRequest.get_executor(); + if (!executor) { + var failed = false; + try { + var executorType = eval(this._defaultExecutorType); + executor = new executorType(); + } catch (e) { + failed = true; + } + if (failed || !Sys.Net.WebRequestExecutor.isInstanceOfType(executor) || !executor) { + throw Error.argument("defaultExecutorType", String.format(Sys.Res.invalidExecutorType, this._defaultExecutorType)); + } + webRequest.set_executor(executor); + } + if (executor.get_aborted()) { + return; + } + var evArgs = new Sys.Net.NetworkRequestEventArgs(webRequest); + var handler = this._get_eventHandlerList().getHandler("invokingRequest"); + if (handler) { + handler(this, evArgs); + } + if (!evArgs.get_cancel()) { + executor.executeRequest(); + } + } +Sys.Net._WebRequestManager.prototype = { + add_invokingRequest: Sys$Net$_WebRequestManager$add_invokingRequest, + remove_invokingRequest: Sys$Net$_WebRequestManager$remove_invokingRequest, + add_completedRequest: Sys$Net$_WebRequestManager$add_completedRequest, + remove_completedRequest: Sys$Net$_WebRequestManager$remove_completedRequest, + _get_eventHandlerList: Sys$Net$_WebRequestManager$_get_eventHandlerList, + get_defaultTimeout: Sys$Net$_WebRequestManager$get_defaultTimeout, + set_defaultTimeout: Sys$Net$_WebRequestManager$set_defaultTimeout, + get_defaultExecutorType: Sys$Net$_WebRequestManager$get_defaultExecutorType, + set_defaultExecutorType: Sys$Net$_WebRequestManager$set_defaultExecutorType, + executeRequest: Sys$Net$_WebRequestManager$executeRequest +} +Sys.Net._WebRequestManager.registerClass('Sys.Net._WebRequestManager'); +Sys.Net.WebRequestManager = new Sys.Net._WebRequestManager(); + +Sys.Net.NetworkRequestEventArgs = function Sys$Net$NetworkRequestEventArgs(webRequest) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "webRequest", type: Sys.Net.WebRequest} + ]); + if (e) throw e; + Sys.Net.NetworkRequestEventArgs.initializeBase(this); + this._webRequest = webRequest; +} + function Sys$Net$NetworkRequestEventArgs$get_webRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._webRequest; + } +Sys.Net.NetworkRequestEventArgs.prototype = { + get_webRequest: Sys$Net$NetworkRequestEventArgs$get_webRequest +} +Sys.Net.NetworkRequestEventArgs.registerClass('Sys.Net.NetworkRequestEventArgs', Sys.CancelEventArgs); + +Sys.Net.WebRequest = function Sys$Net$WebRequest() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._url = ""; + this._headers = { }; + this._body = null; + this._userContext = null; + this._httpVerb = null; + this._executor = null; + this._invokeCalled = false; + this._timeout = 0; +} + function Sys$Net$WebRequest$add_completed(handler) { + /// + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().addHandler("completed", handler); + } + function Sys$Net$WebRequest$remove_completed(handler) { + var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); + if (e) throw e; + this._get_eventHandlerList().removeHandler("completed", handler); + } + function Sys$Net$WebRequest$completed(eventArgs) { + /// + /// + var e = Function._validateParams(arguments, [ + {name: "eventArgs", type: Sys.EventArgs} + ]); + if (e) throw e; + var handler = Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest"); + if (handler) { + handler(this._executor, eventArgs); + } + handler = this._get_eventHandlerList().getHandler("completed"); + if (handler) { + handler(this._executor, eventArgs); + } + } + function Sys$Net$WebRequest$_get_eventHandlerList() { + if (!this._events) { + this._events = new Sys.EventHandlerList(); + } + return this._events; + } + function Sys$Net$WebRequest$get_url() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._url; + } + function Sys$Net$WebRequest$set_url(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._url = value; + } + function Sys$Net$WebRequest$get_headers() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._headers; + } + function Sys$Net$WebRequest$get_httpVerb() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._httpVerb === null) { + if (this._body === null) { + return "GET"; + } + return "POST"; + } + return this._httpVerb; + } + function Sys$Net$WebRequest$set_httpVerb(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + if (value.length === 0) { + throw Error.argument('value', Sys.Res.invalidHttpVerb); + } + this._httpVerb = value; + } + function Sys$Net$WebRequest$get_body() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._body; + } + function Sys$Net$WebRequest$set_body(value) { + var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]); + if (e) throw e; + this._body = value; + } + function Sys$Net$WebRequest$get_userContext() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._userContext; + } + function Sys$Net$WebRequest$set_userContext(value) { + var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]); + if (e) throw e; + this._userContext = value; + } + function Sys$Net$WebRequest$get_executor() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._executor; + } + function Sys$Net$WebRequest$set_executor(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Sys.Net.WebRequestExecutor}]); + if (e) throw e; + if (this._executor !== null && this._executor.get_started()) { + throw Error.invalidOperation(Sys.Res.setExecutorAfterActive); + } + this._executor = value; + this._executor._set_webRequest(this); + } + function Sys$Net$WebRequest$get_timeout() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._timeout === 0) { + return Sys.Net.WebRequestManager.get_defaultTimeout(); + } + return this._timeout; + } + function Sys$Net$WebRequest$set_timeout(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Number}]); + if (e) throw e; + if (value < 0) { + throw Error.argumentOutOfRange("value", value, Sys.Res.invalidTimeout); + } + this._timeout = value; + } + function Sys$Net$WebRequest$getResolvedUrl() { + /// + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return Sys.Net.WebRequest._resolveUrl(this._url); + } + function Sys$Net$WebRequest$invoke() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + if (this._invokeCalled) { + throw Error.invalidOperation(Sys.Res.invokeCalledTwice); + } + Sys.Net.WebRequestManager.executeRequest(this); + this._invokeCalled = true; + } +Sys.Net.WebRequest.prototype = { + add_completed: Sys$Net$WebRequest$add_completed, + remove_completed: Sys$Net$WebRequest$remove_completed, + completed: Sys$Net$WebRequest$completed, + _get_eventHandlerList: Sys$Net$WebRequest$_get_eventHandlerList, + get_url: Sys$Net$WebRequest$get_url, + set_url: Sys$Net$WebRequest$set_url, + get_headers: Sys$Net$WebRequest$get_headers, + get_httpVerb: Sys$Net$WebRequest$get_httpVerb, + set_httpVerb: Sys$Net$WebRequest$set_httpVerb, + get_body: Sys$Net$WebRequest$get_body, + set_body: Sys$Net$WebRequest$set_body, + get_userContext: Sys$Net$WebRequest$get_userContext, + set_userContext: Sys$Net$WebRequest$set_userContext, + get_executor: Sys$Net$WebRequest$get_executor, + set_executor: Sys$Net$WebRequest$set_executor, + get_timeout: Sys$Net$WebRequest$get_timeout, + set_timeout: Sys$Net$WebRequest$set_timeout, + getResolvedUrl: Sys$Net$WebRequest$getResolvedUrl, + invoke: Sys$Net$WebRequest$invoke +} +Sys.Net.WebRequest._resolveUrl = function Sys$Net$WebRequest$_resolveUrl(url, baseUrl) { + if (url && url.indexOf('://') !== -1) { + return url; + } + if (!baseUrl || baseUrl.length === 0) { + var baseElement = document.getElementsByTagName('base')[0]; + if (baseElement && baseElement.href && baseElement.href.length > 0) { + baseUrl = baseElement.href; + } + else { + baseUrl = document.URL; + } + } + var qsStart = baseUrl.indexOf('?'); + if (qsStart !== -1) { + baseUrl = baseUrl.substr(0, qsStart); + } + qsStart = baseUrl.indexOf('#'); + if (qsStart !== -1) { + baseUrl = baseUrl.substr(0, qsStart); + } + baseUrl = baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1); + if (!url || url.length === 0) { + return baseUrl; + } + if (url.charAt(0) === '/') { + var slashslash = baseUrl.indexOf('://'); + if (slashslash === -1) { + throw Error.argument("baseUrl", Sys.Res.badBaseUrl1); + } + var nextSlash = baseUrl.indexOf('/', slashslash + 3); + if (nextSlash === -1) { + throw Error.argument("baseUrl", Sys.Res.badBaseUrl2); + } + return baseUrl.substr(0, nextSlash) + url; + } + else { + var lastSlash = baseUrl.lastIndexOf('/'); + if (lastSlash === -1) { + throw Error.argument("baseUrl", Sys.Res.badBaseUrl3); + } + return baseUrl.substr(0, lastSlash+1) + url; + } +} +Sys.Net.WebRequest._createQueryString = function Sys$Net$WebRequest$_createQueryString(queryString, encodeMethod, addParams) { + encodeMethod = encodeMethod || encodeURIComponent; + var i = 0, obj, val, arg, sb = new Sys.StringBuilder(); + if (queryString) { + for (arg in queryString) { + obj = queryString[arg]; + if (typeof(obj) === "function") continue; + val = Sys.Serialization.JavaScriptSerializer.serialize(obj); + if (i++) { + sb.append('&'); + } + sb.append(arg); + sb.append('='); + sb.append(encodeMethod(val)); + } + } + if (addParams) { + if (i) { + sb.append('&'); + } + sb.append(addParams); + } + return sb.toString(); +} +Sys.Net.WebRequest._createUrl = function Sys$Net$WebRequest$_createUrl(url, queryString, addParams) { + if (!queryString && !addParams) { + return url; + } + var qs = Sys.Net.WebRequest._createQueryString(queryString, null, addParams); + return qs.length + ? url + ((url && url.indexOf('?') >= 0) ? "&" : "?") + qs + : url; +} +Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest'); + +Sys._ScriptLoaderTask = function Sys$_ScriptLoaderTask(scriptElement, completedCallback) { + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "scriptElement", domElement: true}, + {name: "completedCallback", type: Function} + ]); + if (e) throw e; + this._scriptElement = scriptElement; + this._completedCallback = completedCallback; +} + function Sys$_ScriptLoaderTask$get_scriptElement() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._scriptElement; + } + function Sys$_ScriptLoaderTask$dispose() { + if(this._disposed) { + return; + } + this._disposed = true; + this._removeScriptElementHandlers(); + Sys._ScriptLoaderTask._clearScript(this._scriptElement); + this._scriptElement = null; + } + function Sys$_ScriptLoaderTask$execute() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + this._addScriptElementHandlers(); + var headElements = document.getElementsByTagName('head'); + if (headElements.length === 0) { + throw new Error.invalidOperation(Sys.Res.scriptLoadFailedNoHead); + } + else { + headElements[0].appendChild(this._scriptElement); + } + } + function Sys$_ScriptLoaderTask$_addScriptElementHandlers() { + this._scriptLoadDelegate = Function.createDelegate(this, this._scriptLoadHandler); + + if (Sys.Browser.agent !== Sys.Browser.InternetExplorer) { + this._scriptElement.readyState = 'loaded'; + $addHandler(this._scriptElement, 'load', this._scriptLoadDelegate); + } + else { + $addHandler(this._scriptElement, 'readystatechange', this._scriptLoadDelegate); + } + if (this._scriptElement.addEventListener) { + this._scriptErrorDelegate = Function.createDelegate(this, this._scriptErrorHandler); + this._scriptElement.addEventListener('error', this._scriptErrorDelegate, false); + } + } + function Sys$_ScriptLoaderTask$_removeScriptElementHandlers() { + if(this._scriptLoadDelegate) { + var scriptElement = this.get_scriptElement(); + if (Sys.Browser.agent !== Sys.Browser.InternetExplorer) { + $removeHandler(scriptElement, 'load', this._scriptLoadDelegate); + } + else { + $removeHandler(scriptElement, 'readystatechange', this._scriptLoadDelegate); + } + if (this._scriptErrorDelegate) { + this._scriptElement.removeEventListener('error', this._scriptErrorDelegate, false); + this._scriptErrorDelegate = null; + } + this._scriptLoadDelegate = null; + } + } + function Sys$_ScriptLoaderTask$_scriptErrorHandler() { + if(this._disposed) { + return; + } + + this._completedCallback(this.get_scriptElement(), false); + } + function Sys$_ScriptLoaderTask$_scriptLoadHandler() { + if(this._disposed) { + return; + } + var scriptElement = this.get_scriptElement(); + if ((scriptElement.readyState !== 'loaded') && + (scriptElement.readyState !== 'complete')) { + return; + } + + this._completedCallback(scriptElement, true); + } +Sys._ScriptLoaderTask.prototype = { + get_scriptElement: Sys$_ScriptLoaderTask$get_scriptElement, + dispose: Sys$_ScriptLoaderTask$dispose, + execute: Sys$_ScriptLoaderTask$execute, + _addScriptElementHandlers: Sys$_ScriptLoaderTask$_addScriptElementHandlers, + _removeScriptElementHandlers: Sys$_ScriptLoaderTask$_removeScriptElementHandlers, + _scriptErrorHandler: Sys$_ScriptLoaderTask$_scriptErrorHandler, + _scriptLoadHandler: Sys$_ScriptLoaderTask$_scriptLoadHandler +} +Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask", null, Sys.IDisposable); +Sys._ScriptLoaderTask._clearScript = function Sys$_ScriptLoaderTask$_clearScript(scriptElement) { + if (!Sys.Debug.isDebug) { + scriptElement.parentNode.removeChild(scriptElement); + } +} +Type.registerNamespace('Sys.Net'); + +Sys.Net.WebServiceProxy = function Sys$Net$WebServiceProxy() { +} + function Sys$Net$WebServiceProxy$get_timeout() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._timeout || 0; + } + function Sys$Net$WebServiceProxy$set_timeout(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Number}]); + if (e) throw e; + if (value < 0) { throw Error.argumentOutOfRange('value', value, Sys.Res.invalidTimeout); } + this._timeout = value; + } + function Sys$Net$WebServiceProxy$get_defaultUserContext() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return (typeof(this._userContext) === "undefined") ? null : this._userContext; + } + function Sys$Net$WebServiceProxy$set_defaultUserContext(value) { + var e = Function._validateParams(arguments, [{name: "value", mayBeNull: true}]); + if (e) throw e; + this._userContext = value; + } + function Sys$Net$WebServiceProxy$get_defaultSucceededCallback() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._succeeded || null; + } + function Sys$Net$WebServiceProxy$set_defaultSucceededCallback(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); + if (e) throw e; + this._succeeded = value; + } + function Sys$Net$WebServiceProxy$get_defaultFailedCallback() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._failed || null; + } + function Sys$Net$WebServiceProxy$set_defaultFailedCallback(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); + if (e) throw e; + this._failed = value; + } + function Sys$Net$WebServiceProxy$get_enableJsonp() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return !!this._jsonp; + } + function Sys$Net$WebServiceProxy$set_enableJsonp(value) { + var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); + if (e) throw e; + this._jsonp = value; + } + function Sys$Net$WebServiceProxy$get_path() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._path || null; + } + function Sys$Net$WebServiceProxy$set_path(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._path = value; + } + function Sys$Net$WebServiceProxy$get_jsonpCallbackParameter() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._callbackParameter || "callback"; + } + function Sys$Net$WebServiceProxy$set_jsonpCallbackParameter(value) { + var e = Function._validateParams(arguments, [{name: "value", type: String}]); + if (e) throw e; + this._callbackParameter = value; + } + function Sys$Net$WebServiceProxy$_invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "servicePath", type: String}, + {name: "methodName", type: String}, + {name: "useGet", type: Boolean}, + {name: "params"}, + {name: "onSuccess", type: Function, mayBeNull: true, optional: true}, + {name: "onFailure", type: Function, mayBeNull: true, optional: true}, + {name: "userContext", mayBeNull: true, optional: true} + ]); + if (e) throw e; + onSuccess = onSuccess || this.get_defaultSucceededCallback(); + onFailure = onFailure || this.get_defaultFailedCallback(); + if (userContext === null || typeof userContext === 'undefined') userContext = this.get_defaultUserContext(); + return Sys.Net.WebServiceProxy.invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, this.get_timeout(), this.get_enableJsonp(), this.get_jsonpCallbackParameter()); + } +Sys.Net.WebServiceProxy.prototype = { + get_timeout: Sys$Net$WebServiceProxy$get_timeout, + set_timeout: Sys$Net$WebServiceProxy$set_timeout, + get_defaultUserContext: Sys$Net$WebServiceProxy$get_defaultUserContext, + set_defaultUserContext: Sys$Net$WebServiceProxy$set_defaultUserContext, + get_defaultSucceededCallback: Sys$Net$WebServiceProxy$get_defaultSucceededCallback, + set_defaultSucceededCallback: Sys$Net$WebServiceProxy$set_defaultSucceededCallback, + get_defaultFailedCallback: Sys$Net$WebServiceProxy$get_defaultFailedCallback, + set_defaultFailedCallback: Sys$Net$WebServiceProxy$set_defaultFailedCallback, + get_enableJsonp: Sys$Net$WebServiceProxy$get_enableJsonp, + set_enableJsonp: Sys$Net$WebServiceProxy$set_enableJsonp, + get_path: Sys$Net$WebServiceProxy$get_path, + set_path: Sys$Net$WebServiceProxy$set_path, + get_jsonpCallbackParameter: Sys$Net$WebServiceProxy$get_jsonpCallbackParameter, + set_jsonpCallbackParameter: Sys$Net$WebServiceProxy$set_jsonpCallbackParameter, + _invoke: Sys$Net$WebServiceProxy$_invoke +} +Sys.Net.WebServiceProxy.registerClass('Sys.Net.WebServiceProxy'); +Sys.Net.WebServiceProxy.invoke = function Sys$Net$WebServiceProxy$invoke(servicePath, methodName, useGet, params, onSuccess, onFailure, userContext, timeout, enableJsonp, jsonpCallbackParameter) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "servicePath", type: String}, + {name: "methodName", type: String, mayBeNull: true, optional: true}, + {name: "useGet", type: Boolean, optional: true}, + {name: "params", mayBeNull: true, optional: true}, + {name: "onSuccess", type: Function, mayBeNull: true, optional: true}, + {name: "onFailure", type: Function, mayBeNull: true, optional: true}, + {name: "userContext", mayBeNull: true, optional: true}, + {name: "timeout", type: Number, optional: true}, + {name: "enableJsonp", type: Boolean, mayBeNull: true, optional: true}, + {name: "jsonpCallbackParameter", type: String, mayBeNull: true, optional: true} + ]); + if (e) throw e; + var schemeHost = (enableJsonp !== false) ? Sys.Net.WebServiceProxy._xdomain.exec(servicePath) : null, + tempCallback, jsonp = schemeHost && (schemeHost.length === 3) && + ((schemeHost[1] !== location.protocol) || (schemeHost[2] !== location.host)); + useGet = jsonp || useGet; + if (jsonp) { + jsonpCallbackParameter = jsonpCallbackParameter || "callback"; + tempCallback = "_jsonp" + Sys._jsonp++; + } + if (!params) params = {}; + var urlParams = params; + if (!useGet || !urlParams) urlParams = {}; + var script, error, timeoutcookie = null, loader, body = null, + url = Sys.Net.WebRequest._createUrl(methodName + ? (servicePath+"/"+encodeURIComponent(methodName)) + : servicePath, urlParams, jsonp ? (jsonpCallbackParameter + "=Sys." + tempCallback) : null); + if (jsonp) { + script = document.createElement("script"); + script.src = url; + loader = new Sys._ScriptLoaderTask(script, function(script, loaded) { + if (!loaded || tempCallback) { + jsonpComplete({ Message: String.format(Sys.Res.webServiceFailedNoMsg, methodName) }, -1); + } + }); + function jsonpComplete(data, statusCode) { + if (timeoutcookie !== null) { + window.clearTimeout(timeoutcookie); + timeoutcookie = null; + } + loader.dispose(); + delete Sys[tempCallback]; + tempCallback = null; + if ((typeof(statusCode) !== "undefined") && (statusCode !== 200)) { + if (onFailure) { + error = new Sys.Net.WebServiceError(false, + data.Message || String.format(Sys.Res.webServiceFailedNoMsg, methodName), + data.StackTrace || null, + data.ExceptionType || null, + data); + error._statusCode = statusCode; + onFailure(error, userContext, methodName); + } + else { + if (data.StackTrace && data.Message) { + error = data.StackTrace + "-- " + data.Message; + } + else { + error = data.StackTrace || data.Message; + } + error = String.format(error ? Sys.Res.webServiceFailed : Sys.Res.webServiceFailedNoMsg, methodName, error); + throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error)); + } + } + else if (onSuccess) { + onSuccess(data, userContext, methodName); + } + } + Sys[tempCallback] = jsonpComplete; + loader.execute(); + return null; + } + var request = new Sys.Net.WebRequest(); + request.set_url(url); + request.get_headers()['Content-Type'] = 'application/json; charset=utf-8'; + if (!useGet) { + body = Sys.Serialization.JavaScriptSerializer.serialize(params); + if (body === "{}") body = ""; + } + request.set_body(body); + request.add_completed(onComplete); + if (timeout && timeout > 0) request.set_timeout(timeout); + request.invoke(); + + function onComplete(response, eventArgs) { + if (response.get_responseAvailable()) { + var statusCode = response.get_statusCode(); + var result = null; + + try { + var contentType = response.getResponseHeader("Content-Type"); + if (contentType.startsWith("application/json")) { + result = response.get_object(); + } + else if (contentType.startsWith("text/xml")) { + result = response.get_xml(); + } + else { + result = response.get_responseData(); + } + } catch (ex) { + } + var error = response.getResponseHeader("jsonerror"); + var errorObj = (error === "true"); + if (errorObj) { + if (result) { + result = new Sys.Net.WebServiceError(false, result.Message, result.StackTrace, result.ExceptionType, result); + } + } + else if (contentType.startsWith("application/json")) { + result = (!result || (typeof(result.d) === "undefined")) ? result : result.d; + } + if (((statusCode < 200) || (statusCode >= 300)) || errorObj) { + if (onFailure) { + if (!result || !errorObj) { + result = new Sys.Net.WebServiceError(false , String.format(Sys.Res.webServiceFailedNoMsg, methodName)); + } + result._statusCode = statusCode; + onFailure(result, userContext, methodName); + } + else { + if (result && errorObj) { + error = result.get_exceptionType() + "-- " + result.get_message(); + } + else { + error = response.get_responseData(); + } + throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error)); + } + } + else if (onSuccess) { + onSuccess(result, userContext, methodName); + } + } + else { + var msg; + if (response.get_timedOut()) { + msg = String.format(Sys.Res.webServiceTimedOut, methodName); + } + else { + msg = String.format(Sys.Res.webServiceFailedNoMsg, methodName) + } + if (onFailure) { + onFailure(new Sys.Net.WebServiceError(response.get_timedOut(), msg, "", ""), userContext, methodName); + } + else { + throw Sys.Net.WebServiceProxy._createFailedError(methodName, msg); + } + } + } + return request; +} +Sys.Net.WebServiceProxy._createFailedError = function Sys$Net$WebServiceProxy$_createFailedError(methodName, errorMessage) { + var displayMessage = "Sys.Net.WebServiceFailedException: " + errorMessage; + var e = Error.create(displayMessage, { 'name': 'Sys.Net.WebServiceFailedException', 'methodName': methodName }); + e.popStackFrame(); + return e; +} +Sys.Net.WebServiceProxy._defaultFailedCallback = function Sys$Net$WebServiceProxy$_defaultFailedCallback(err, methodName) { + var error = err.get_exceptionType() + "-- " + err.get_message(); + throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceFailed, methodName, error)); +} +Sys.Net.WebServiceProxy._generateTypedConstructor = function Sys$Net$WebServiceProxy$_generateTypedConstructor(type) { + return function(properties) { + if (properties) { + for (var name in properties) { + this[name] = properties[name]; + } + } + this.__type = type; + } +} +Sys._jsonp = 0; +Sys.Net.WebServiceProxy._xdomain = /^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/; + +Sys.Net.WebServiceError = function Sys$Net$WebServiceError(timedOut, message, stackTrace, exceptionType, errorObject) { + /// + /// + /// + /// + /// + /// + var e = Function._validateParams(arguments, [ + {name: "timedOut", type: Boolean}, + {name: "message", type: String, mayBeNull: true}, + {name: "stackTrace", type: String, mayBeNull: true, optional: true}, + {name: "exceptionType", type: String, mayBeNull: true, optional: true}, + {name: "errorObject", type: Object, mayBeNull: true, optional: true} + ]); + if (e) throw e; + this._timedOut = timedOut; + this._message = message; + this._stackTrace = stackTrace; + this._exceptionType = exceptionType; + this._errorObject = errorObject; + this._statusCode = -1; +} + function Sys$Net$WebServiceError$get_timedOut() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._timedOut; + } + function Sys$Net$WebServiceError$get_statusCode() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._statusCode; + } + function Sys$Net$WebServiceError$get_message() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._message; + } + function Sys$Net$WebServiceError$get_stackTrace() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._stackTrace || ""; + } + function Sys$Net$WebServiceError$get_exceptionType() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._exceptionType || ""; + } + function Sys$Net$WebServiceError$get_errorObject() { + /// + if (arguments.length !== 0) throw Error.parameterCount(); + return this._errorObject || null; + } +Sys.Net.WebServiceError.prototype = { + get_timedOut: Sys$Net$WebServiceError$get_timedOut, + get_statusCode: Sys$Net$WebServiceError$get_statusCode, + get_message: Sys$Net$WebServiceError$get_message, + get_stackTrace: Sys$Net$WebServiceError$get_stackTrace, + get_exceptionType: Sys$Net$WebServiceError$get_exceptionType, + get_errorObject: Sys$Net$WebServiceError$get_errorObject +} +Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError'); + + +Type.registerNamespace('Sys'); + +Sys.Res={ +'urlMustBeLessThan1024chars':'The history state must be small enough to not make the url larger than 1024 characters.', +'argumentTypeName':'Value is not the name of an existing type.', +'cantBeCalledAfterDispose':'Can\'t be called after dispose.', +'componentCantSetIdAfterAddedToApp':'The id property of a component can\'t be set after it\'s been added to the Application object.', +'behaviorDuplicateName':'A behavior with name \'{0}\' already exists or it is the name of an existing property on the target element.', +'notATypeName':'Value is not a valid type name.', +'elementNotFound':'An element with id \'{0}\' could not be found.', +'stateMustBeStringDictionary':'The state object can only have null and string fields.', +'boolTrueOrFalse':'Value must be \'true\' or \'false\'.', +'scriptLoadFailedNoHead':'ScriptLoader requires pages to contain a element.', +'stringFormatInvalid':'The format string is invalid.', +'referenceNotFound':'Component \'{0}\' was not found.', +'enumReservedName':'\'{0}\' is a reserved name that can\'t be used as an enum value name.', +'circularParentChain':'The chain of control parents can\'t have circular references.', +'namespaceContainsNonObject':'Object {0} already exists and is not an object.', +'undefinedEvent':'\'{0}\' is not an event.', +'propertyUndefined':'\'{0}\' is not a property or an existing field.', +'observableConflict':'Object already contains a member with the name \'{0}\'.', +'historyCannotEnableHistory':'Cannot set enableHistory after initialization.', +'eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.', +'scriptLoadFailedDebug':'The script \'{0}\' failed to load. Check for:\r\n Inaccessible path.\r\n Script errors. (IE) Enable \'Display a notification about every script error\' under advanced settings.', +'propertyNotWritable':'\'{0}\' is not a writable property.', +'enumInvalidValueName':'\'{0}\' is not a valid name for an enum value.', +'controlAlreadyDefined':'A control is already associated with the element.', +'addHandlerCantBeUsedForError':'Can\'t add a handler for the error event using this method. Please set the window.onerror property instead.', +'cantAddNonFunctionhandler':'Can\'t add a handler that is not a function.', +'invalidNameSpace':'Value is not a valid namespace identifier.', +'notAnInterface':'Value is not a valid interface.', +'eventHandlerNotFunction':'Handler must be a function.', +'propertyNotAnArray':'\'{0}\' is not an Array property.', +'namespaceContainsClass':'Object {0} already exists as a class, enum, or interface.', +'typeRegisteredTwice':'Type {0} has already been registered. The type may be defined multiple times or the script file that defines it may have already been loaded. A possible cause is a change of settings during a partial update.', +'cantSetNameAfterInit':'The name property can\'t be set on this object after initialization.', +'historyMissingFrame':'For the history feature to work in IE, the page must have an iFrame element with id \'__historyFrame\' pointed to a page that gets its title from the \'title\' query string parameter and calls Sys.Application._onIFrameLoad() on the parent window. This can be done by setting EnableHistory to true on ScriptManager.', +'appDuplicateComponent':'Two components with the same id \'{0}\' can\'t be added to the application.', +'historyCannotAddHistoryPointWithHistoryDisabled':'A history point can only be added if enableHistory is set to true.', +'baseNotAClass':'Value is not a class.', +'expectedElementOrId':'Value must be a DOM element or DOM element Id.', +'methodNotFound':'No method found with name \'{0}\'.', +'arrayParseBadFormat':'Value must be a valid string representation for an array. It must start with a \'[\' and end with a \']\'.', +'stateFieldNameInvalid':'State field names must not contain any \'=\' characters.', +'cantSetId':'The id property can\'t be set on this object.', +'stringFormatBraceMismatch':'The format string contains an unmatched opening or closing brace.', +'enumValueNotInteger':'An enumeration definition can only contain integer values.', +'propertyNullOrUndefined':'Cannot set the properties of \'{0}\' because it returned a null value.', +'argumentDomNode':'Value must be a DOM element or a text node.', +'componentCantSetIdTwice':'The id property of a component can\'t be set more than once.', +'createComponentOnDom':'Value must be null for Components that are not Controls or Behaviors.', +'createNotComponent':'{0} does not derive from Sys.Component.', +'createNoDom':'Value must not be null for Controls and Behaviors.', +'cantAddWithoutId':'Can\'t add a component that doesn\'t have an id.', +'notObservable':'Instances of type \'{0}\' cannot be observed.', +'badTypeName':'Value is not the name of the type being registered or the name is a reserved word.', +'argumentInteger':'Value must be an integer.', +'invokeCalledTwice':'Cannot call invoke more than once.', +'webServiceFailed':'The server method \'{0}\' failed with the following error: {1}', +'argumentType':'Object cannot be converted to the required type.', +'argumentNull':'Value cannot be null.', +'scriptAlreadyLoaded':'The script \'{0}\' has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.', +'scriptDependencyNotFound':'The script \'{0}\' failed to load because it is dependent on script \'{1}\'.', +'formatBadFormatSpecifier':'Format specifier was invalid.', +'requiredScriptReferenceNotIncluded':'\'{0}\' requires that you have included a script reference to \'{1}\'.', +'webServiceFailedNoMsg':'The server method \'{0}\' failed.', +'argumentDomElement':'Value must be a DOM element.', +'invalidExecutorType':'Could not create a valid Sys.Net.WebRequestExecutor from: {0}.', +'cannotCallBeforeResponse':'Cannot call {0} when responseAvailable is false.', +'actualValue':'Actual value was {0}.', +'enumInvalidValue':'\'{0}\' is not a valid value for enum {1}.', +'scriptLoadFailed':'The script \'{0}\' could not be loaded.', +'parameterCount':'Parameter count mismatch.', +'cannotDeserializeEmptyString':'Cannot deserialize empty string.', +'formatInvalidString':'Input string was not in a correct format.', +'invalidTimeout':'Value must be greater than or equal to zero.', +'cannotAbortBeforeStart':'Cannot abort when executor has not started.', +'argument':'Value does not fall within the expected range.', +'cannotDeserializeInvalidJson':'Cannot deserialize. The data does not correspond to valid JSON.', +'invalidHttpVerb':'httpVerb cannot be set to an empty or null string.', +'nullWebRequest':'Cannot call executeRequest with a null webRequest.', +'eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.', +'cannotSerializeNonFiniteNumbers':'Cannot serialize non finite numbers.', +'argumentUndefined':'Value cannot be undefined.', +'webServiceInvalidReturnType':'The server method \'{0}\' returned an invalid type. Expected type: {1}', +'servicePathNotSet':'The path to the web service has not been set.', +'argumentTypeWithTypes':'Object of type \'{0}\' cannot be converted to type \'{1}\'.', +'cannotCallOnceStarted':'Cannot call {0} once started.', +'badBaseUrl1':'Base URL does not contain ://.', +'badBaseUrl2':'Base URL does not contain another /.', +'badBaseUrl3':'Cannot find last / in base URL.', +'setExecutorAfterActive':'Cannot set executor after it has become active.', +'paramName':'Parameter name: {0}', +'nullReferenceInPath':'Null reference while evaluating data path: \'{0}\'.', +'cannotCallOutsideHandler':'Cannot call {0} outside of a completed event handler.', +'cannotSerializeObjectWithCycle':'Cannot serialize object with cyclic reference within child properties.', +'format':'One of the identified items was in an invalid format.', +'assertFailedCaller':'Assertion Failed: {0}\r\nat {1}', +'argumentOutOfRange':'Specified argument was out of the range of valid values.', +'webServiceTimedOut':'The server method \'{0}\' timed out.', +'notImplemented':'The method or operation is not implemented.', +'assertFailed':'Assertion Failed: {0}', +'invalidOperation':'Operation is not valid due to the current state of the object.', +'breakIntoDebugger':'{0}\r\n\r\nBreak into debugger?' +}; diff --git a/Web/Scripts/MicrosoftAjax.js b/Web/Scripts/MicrosoftAjax.js new file mode 100644 index 0000000..52e6626 --- /dev/null +++ b/Web/Scripts/MicrosoftAjax.js @@ -0,0 +1,6 @@ +//---------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//---------------------------------------------------------- +// MicrosoftAjax.js +Function.__typeName="Function";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(eb){c=true;for(a=0;a0&&(d=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e==="undefined")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" Firefox/")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\/(\d+\.\d+)/)[1]);Sys.Browser.name="Firefox";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" AppleWebKit/")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\/(\d+(\.\d+)?)/)[1]);Sys.Browser.name="Safari"}else if(navigator.userAgent.indexOf("Opera/")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass("Sys.EventArgs");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass("Sys.CancelEventArgs",Sys.EventArgs);Type.registerNamespace("Sys.UI");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!=="undefined"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value+=b+"\n"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value=""},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval("debugger")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:"traceDump";b=b?b:"";if(a===null){this.trace(b+c+": null");return}switch(typeof a){case "undefined":this.trace(b+c+": Undefined");break;case "number":case "string":case "boolean":this.trace(b+c+": "+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+": "+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+": ...");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName==="string"){var k=a.tagName?a.tagName:"DomElement";if(a.id)k+=" - "+a.id;this.trace(b+c+" {"+k+"}")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i==="string"?" {"+i+"}":""));if(b===""||f){b+=" ";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e=0;d--){var k=h[d].trim();b=a[k];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c.split(",")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(", ")}return ""}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!=="number")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!=="number")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass("Sys.CollectionChange");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum("Sys.NotifyCollectionChangedAction");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass("Sys.Observer");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,"propertyChanged",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,"propertyChanged",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,"")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(".");for(var i=0,m=d.length-1;i-1&&ac.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g,"\\\\$1");var a=new Sys.StringBuilder("^"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case "dddd":case "ddd":case "MMMM":case "MMM":case "gg":case "g":a.append("(\\D+)");break;case "tt":case "t":a.append("(\\D*)");break;case "yyyy":a.append("(\\d{4})");break;case "fff":a.append("(\\d{3})");break;case "ff":a.append("(\\d{2})");break;case "f":a.append("(\\d)");break;case "dd":case "d":case "MM":case "M":case "yy":case "y":case "HH":case "H":case "hh":case "h":case "mm":case "m":case "ss":case "s":a.append("(\\d\\d?)");break;case "zzz":a.append("([+-]?\\d\\d?:\\d{2})");break;case "zz":case "z":a.append("([+-]?\\d\\d?)");break;case "/":a.append("(\\"+b.DateSeparator+")")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append("$");var k=a.toString().replace(/\s+/g,"\\s+"),g={"regExp":k,"groups":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a31)return null;break;case "MMMM":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case "MMM":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case "M":case "MM":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case "y":case "yy":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case "yyyy":e=parseInt(a,10);if(e<0||e>9999)return null;break;case "h":case "hh":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case "H":case "HH":d=parseInt(a,10);if(d<0||d>23)return null;break;case "m":case "mm":q=parseInt(a,10);if(q<0||q>59)return null;break;case "s":case "ss":r=parseInt(a,10);if(r<0||r>59)return null;break;case "tt":case "t":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case "f":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case "ff":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case "fff":f=parseInt(a,10);if(f<0||f>999)return null;break;case "dddd":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case "ddd":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case "zzz":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var o=parseInt(u[1],10);if(o<0||o>59)return null;n=h*60+(a.startsWith("-")?-o:o);break;case "z":case "zz":h=parseInt(a,10);if(h<-12||h>13)return null;n=h*60;break;case "g":case "gg":var p=a;if(!p||!g.eras)return null;p=p.toLowerCase().trim();for(var s=0,F=g.eras.length;s0)return this.toLocaleString();else return this.toString();var o=["n %","n%","%n"],n=["-n %","-n%","-%n"],p=["(n)","-n","- n","n-","n -"],m=["$n","n$","$ n","n $"],l=["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];function g(a,c,d){for(var b=a.length;b1?parseInt(e[1]):0;e=b.split(".");b=e[0];a=e.length>1?e[1]:"";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a="";var d=b.length-1,f="";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case "d":case "D":c="n";if(b!==-1)d=g(""+d,b,true);if(this<0)d=-d;break;case "c":case "C":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case "n":case "N":if(this<0)c=p[a.NumberNegativePattern];else c="n";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case "p":case "P":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\$|-|%/g,f="";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case "n":f+=d;break;case "$":f+=a.CurrencySymbol;break;case "-":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case "%":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a0)a.append(",");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append("]")}else{if(Date.isInstanceOfType(b)){a.append('"\\/Date(');a.append(b.getTime());a.append(')\\/"');break}var d=[],f=0;for(var e in b){if(e.startsWith("$"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append("{");var j=false;for(c=0;c=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!=="undefined"){this.dispose=b;this._chainDispose=null;if(a==="function")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!=="absolute")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!=="BODY"&&f!=="HTML"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i==="absolute")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c==="BODY"&&(!g||g.position!=="absolute"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!=="TABLE"&&c!=="TD"&&c!=="HTML"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c==="TABLE"&&(b.position==="relative"||b.position==="absolute")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!=="absolute")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!=="BODY"&&c!=="HTML"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=" "+d.className+" ",b=a.indexOf(" "+c+" ");if(b>=0)d.className=(a.substr(0,b)+" "+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a==="string")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position="absolute";a.left=c+"px";a.top=d+"px"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!=="hidden"&&a.display!=="none"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?"visible":"hidden";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode==="none")switch(a.tagName.toUpperCase()){case "DIV":case "P":case "ADDRESS":case "BLOCKQUOTE":case "BODY":case "COL":case "COLGROUP":case "DD":case "DL":case "DT":case "FIELDSET":case "FORM":case "H1":case "H2":case "H3":case "H4":case "H5":case "H6":case "HR":case "IFRAME":case "LEGEND":case "OL":case "PRE":case "TABLE":case "TD":case "TH":case "TR":case "UL":a._oldDisplayMode="block";break;case "LI":a._oldDisplayMode="list-item";break;default:a._oldDisplayMode="inline"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position="absolute";a.style.display="block";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display="none"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface("Sys.IContainer");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass("Sys.ApplicationLoadEventArgs",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler("init",a)},remove_init:function(a){this.get_events().removeHandler("init",a)},add_load:function(a){this.get_events().addHandler("load",a)},remove_load:function(a){this.get_events().removeHandler("load",a)},add_unload:function(a){this.get_events().addHandler("unload",a)},remove_unload:function(a){this.get_events().removeHandler("unload",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler("unload");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a=0;b--)this._disposeElementInternal(c[b]);if(!d)this._disposeElementInternal(a)}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a1000){var c=[];for(var d=0,f=b.length;d=0;b--){var c=a[b];if(typeof c.dispose==="function")c.dispose()}},_disposeElementInternal:function(a){var d=a.dispose;if(d&&typeof d==="function")a.dispose();else{var c=a.control;if(c&&typeof c.dispose==="function")c.dispose()}var b=a._behaviors;if(b)this._disposeComponents(b);b=a._components;if(b){this._disposeComponents(b);a._components=null}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,"load",c);b()};Sys.UI.DomEvent.addHandler(window,"load",c);if(document.addEventListener)try{document.addEventListener("DOMContentLoaded",a=function(){document.removeEventListener("DOMContentLoaded",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement("div");a=function(){try{d.doScroll("left")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent("onreadystatechange",a=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler("init");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass("Sys._Application",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,"get_id");if(a)return a;if(!this._element||!this._element.id)return "";return this._element.id+"$"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(".");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,"initialize");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,"dispose");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass("Sys.UI.Behavior",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b0&&a.charAt(0)==="#")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler("navigate",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler("navigate",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!=="undefined")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||"";var b=a.indexOf("&&");if(b!==-1&&b+2'");c.write(""+(b||document.title)+"parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+");");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var f=this.get_stateString();if(a!==f){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!=="undefined"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP"];for(var a=0,c=b.length;a0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a="";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf("MSIE")!==-1)a.setProperty("SelectionLanguage","XPath");if(a.documentElement.namespaceURI==="http://www.mozilla.org/newlayout/xml/parsererror.xml"&&a.documentElement.tagName==="parsererror")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName==="parsererror")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass("Sys.Net.XMLHttpExecutor",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType="Sys.Net.XMLHttpExecutor"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler("invokingRequest",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler("invokingRequest",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler("completedRequest",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler("completedRequest",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler("invokingRequest");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass("Sys.Net._WebRequestManager");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass("Sys.Net.NetworkRequestEventArgs",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url="";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler("completed",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler("completed",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler("completed");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return "GET";return "POST"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf("://")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName("base")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf("?");if(c!==-1)a=a.substr(0,c);c=a.indexOf("#");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf("/")+1);if(!b||b.length===0)return a;if(b.charAt(0)==="/"){var e=a.indexOf("://"),g=a.indexOf("/",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf("/");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e==="function")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append("&");a.append(d);a.append("=");a.append(b(g))}if(f){if(h)a.append("&");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf("?")>=0?"&":"?")+d:a};Sys.Net.WebRequest.registerClass("Sys.Net.WebRequest");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){this._addScriptElementHandlers();document.getElementsByTagName("head")[0].appendChild(this._scriptElement)},_addScriptElementHandlers:function(){this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(Sys.Browser.agent!==Sys.Browser.InternetExplorer){this._scriptElement.readyState="loaded";$addHandler(this._scriptElement,"load",this._scriptLoadDelegate)}else $addHandler(this._scriptElement,"readystatechange",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener("error",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(Sys.Browser.agent!==Sys.Browser.InternetExplorer)$removeHandler(a,"load",this._scriptLoadDelegate);else $removeHandler(a,"readystatechange",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener("error",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(a.readyState!=="loaded"&&a.readyState!=="complete")return;this._completedCallback(a,true)}};Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug)a.parentNode.removeChild(a)};Type.registerNamespace("Sys.Net");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange("value",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext==="undefined"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||"callback"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a==="undefined")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass("Sys.Net.WebServiceProxy");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||"callback";c="_jsonp"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+"/"+encodeURIComponent(a):q,r,n?p+"=Sys."+c:null);if(n){s=document.createElement("script");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!=="undefined"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o==="{}")o=""}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))c=d.get_object();else if(e.startsWith("text/xml"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith("application/json"))c=!c||typeof c.d==="undefined"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,"",""),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||""},get_exceptionType:function(){return this._exceptionType||""},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError"); +Type.registerNamespace('Sys');Sys.Res={'argumentInteger':'Value must be an integer.','invokeCalledTwice':'Cannot call invoke more than once.','webServiceFailed':'The server method \'{0}\' failed with the following error: {1}','argumentType':'Object cannot be converted to the required type.','argumentNull':'Value cannot be null.','scriptAlreadyLoaded':'The script \'{0}\' has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.','scriptDependencyNotFound':'The script \'{0}\' failed to load because it is dependent on script \'{1}\'.','formatBadFormatSpecifier':'Format specifier was invalid.','requiredScriptReferenceNotIncluded':'\'{0}\' requires that you have included a script reference to \'{1}\'.','webServiceFailedNoMsg':'The server method \'{0}\' failed.','argumentDomElement':'Value must be a DOM element.','invalidExecutorType':'Could not create a valid Sys.Net.WebRequestExecutor from: {0}.','cannotCallBeforeResponse':'Cannot call {0} when responseAvailable is false.','actualValue':'Actual value was {0}.','enumInvalidValue':'\'{0}\' is not a valid value for enum {1}.','scriptLoadFailed':'The script \'{0}\' could not be loaded.','parameterCount':'Parameter count mismatch.','cannotDeserializeEmptyString':'Cannot deserialize empty string.','formatInvalidString':'Input string was not in a correct format.','invalidTimeout':'Value must be greater than or equal to zero.','cannotAbortBeforeStart':'Cannot abort when executor has not started.','argument':'Value does not fall within the expected range.','cannotDeserializeInvalidJson':'Cannot deserialize. The data does not correspond to valid JSON.','invalidHttpVerb':'httpVerb cannot be set to an empty or null string.','nullWebRequest':'Cannot call executeRequest with a null webRequest.','eventHandlerInvalid':'Handler was not added through the Sys.UI.DomEvent.addHandler method.','cannotSerializeNonFiniteNumbers':'Cannot serialize non finite numbers.','argumentUndefined':'Value cannot be undefined.','webServiceInvalidReturnType':'The server method \'{0}\' returned an invalid type. Expected type: {1}','servicePathNotSet':'The path to the web service has not been set.','argumentTypeWithTypes':'Object of type \'{0}\' cannot be converted to type \'{1}\'.','cannotCallOnceStarted':'Cannot call {0} once started.','badBaseUrl1':'Base URL does not contain ://.','badBaseUrl2':'Base URL does not contain another /.','badBaseUrl3':'Cannot find last / in base URL.','setExecutorAfterActive':'Cannot set executor after it has become active.','paramName':'Parameter name: {0}','nullReferenceInPath':'Null reference while evaluating data path: \'{0}\'.','cannotCallOutsideHandler':'Cannot call {0} outside of a completed event handler.','cannotSerializeObjectWithCycle':'Cannot serialize object with cyclic reference within child properties.','format':'One of the identified items was in an invalid format.','assertFailedCaller':'Assertion Failed: {0}\r\nat {1}','argumentOutOfRange':'Specified argument was out of the range of valid values.','webServiceTimedOut':'The server method \'{0}\' timed out.','notImplemented':'The method or operation is not implemented.','assertFailed':'Assertion Failed: {0}','invalidOperation':'Operation is not valid due to the current state of the object.','breakIntoDebugger':'{0}\r\n\r\nBreak into debugger?'}; diff --git a/Web/Scripts/MicrosoftMvcAjax.debug.js b/Web/Scripts/MicrosoftMvcAjax.debug.js new file mode 100644 index 0000000..eb68ba7 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcAjax.debug.js @@ -0,0 +1,408 @@ +//!---------------------------------------------------------- +//! Copyright (C) Microsoft Corporation. All rights reserved. +//!---------------------------------------------------------- +//! MicrosoftMvcAjax.js + +Type.registerNamespace('Sys.Mvc'); + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AjaxOptions + +Sys.Mvc.$create_AjaxOptions = function Sys_Mvc_AjaxOptions() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.InsertionMode + +Sys.Mvc.InsertionMode = function() { + /// + /// + /// + /// + /// + /// +}; +Sys.Mvc.InsertionMode.prototype = { + replace: 0, + insertBefore: 1, + insertAfter: 2 +} +Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode', false); + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AjaxContext + +Sys.Mvc.AjaxContext = function Sys_Mvc_AjaxContext(request, updateTarget, loadingElement, insertionMode) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + this._request = request; + this._updateTarget = updateTarget; + this._loadingElement = loadingElement; + this._insertionMode = insertionMode; +} +Sys.Mvc.AjaxContext.prototype = { + _insertionMode: 0, + _loadingElement: null, + _response: null, + _request: null, + _updateTarget: null, + + get_data: function Sys_Mvc_AjaxContext$get_data() { + /// + if (this._response) { + return this._response.get_responseData(); + } + else { + return null; + } + }, + + get_insertionMode: function Sys_Mvc_AjaxContext$get_insertionMode() { + /// + return this._insertionMode; + }, + + get_loadingElement: function Sys_Mvc_AjaxContext$get_loadingElement() { + /// + return this._loadingElement; + }, + + get_object: function Sys_Mvc_AjaxContext$get_object() { + /// + var executor = this.get_response(); + return (executor) ? executor.get_object() : null; + }, + + get_response: function Sys_Mvc_AjaxContext$get_response() { + /// + return this._response; + }, + set_response: function Sys_Mvc_AjaxContext$set_response(value) { + /// + this._response = value; + return value; + }, + + get_request: function Sys_Mvc_AjaxContext$get_request() { + /// + return this._request; + }, + + get_updateTarget: function Sys_Mvc_AjaxContext$get_updateTarget() { + /// + return this._updateTarget; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AsyncHyperlink + +Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() { +} +Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) { + /// + /// + /// + /// + /// + /// + evt.preventDefault(); + Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions); +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.MvcHelpers + +Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() { +} +Sys.Mvc.MvcHelpers._serializeSubmitButton = function Sys_Mvc_MvcHelpers$_serializeSubmitButton(element, offsetX, offsetY) { + /// + /// + /// + /// + /// + /// + /// + if (element.disabled) { + return null; + } + var name = element.name; + if (name) { + var tagName = element.tagName.toUpperCase(); + var encodedName = encodeURIComponent(name); + var inputElement = element; + if (tagName === 'INPUT') { + var type = inputElement.type; + if (type === 'submit') { + return encodedName + '=' + encodeURIComponent(inputElement.value); + } + else if (type === 'image') { + return encodedName + '.x=' + offsetX + '&' + encodedName + '.y=' + offsetY; + } + } + else if ((tagName === 'BUTTON') && (name.length) && (inputElement.type === 'submit')) { + return encodedName + '=' + encodeURIComponent(inputElement.value); + } + } + return null; +} +Sys.Mvc.MvcHelpers._serializeForm = function Sys_Mvc_MvcHelpers$_serializeForm(form) { + /// + /// + /// + var formElements = form.elements; + var formBody = new Sys.StringBuilder(); + var count = formElements.length; + for (var i = 0; i < count; i++) { + var element = formElements[i]; + var name = element.name; + if (!name || !name.length) { + continue; + } + var tagName = element.tagName.toUpperCase(); + if (tagName === 'INPUT') { + var inputElement = element; + var type = inputElement.type; + if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked)) { + formBody.append(encodeURIComponent(name)); + formBody.append('='); + formBody.append(encodeURIComponent(inputElement.value)); + formBody.append('&'); + } + } + else if (tagName === 'SELECT') { + var selectElement = element; + var optionCount = selectElement.options.length; + for (var j = 0; j < optionCount; j++) { + var optionElement = selectElement.options[j]; + if (optionElement.selected) { + formBody.append(encodeURIComponent(name)); + formBody.append('='); + formBody.append(encodeURIComponent(optionElement.value)); + formBody.append('&'); + } + } + } + else if (tagName === 'TEXTAREA') { + formBody.append(encodeURIComponent(name)); + formBody.append('='); + formBody.append(encodeURIComponent((element.value))); + formBody.append('&'); + } + } + var additionalInput = form._additionalInput; + if (additionalInput) { + formBody.append(additionalInput); + formBody.append('&'); + } + return formBody.toString(); +} +Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + if (ajaxOptions.confirm) { + if (!confirm(ajaxOptions.confirm)) { + return; + } + } + if (ajaxOptions.url) { + url = ajaxOptions.url; + } + if (ajaxOptions.httpMethod) { + verb = ajaxOptions.httpMethod; + } + if (body.length > 0 && !body.endsWith('&')) { + body += '&'; + } + body += 'X-Requested-With=XMLHttpRequest'; + var upperCaseVerb = verb.toUpperCase(); + var isGetOrPost = (upperCaseVerb === 'GET' || upperCaseVerb === 'POST'); + if (!isGetOrPost) { + body += '&'; + body += 'X-HTTP-Method-Override=' + upperCaseVerb; + } + var requestBody = ''; + if (upperCaseVerb === 'GET' || upperCaseVerb === 'DELETE') { + if (url.indexOf('?') > -1) { + if (!url.endsWith('&')) { + url += '&'; + } + url += body; + } + else { + url += '?'; + url += body; + } + } + else { + requestBody = body; + } + var request = new Sys.Net.WebRequest(); + request.set_url(url); + if (isGetOrPost) { + request.set_httpVerb(verb); + } + else { + request.set_httpVerb('POST'); + request.get_headers()['X-HTTP-Method-Override'] = upperCaseVerb; + } + request.set_body(requestBody); + if (verb.toUpperCase() === 'PUT') { + request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;'; + } + request.get_headers()['X-Requested-With'] = 'XMLHttpRequest'; + var updateElement = null; + if (ajaxOptions.updateTargetId) { + updateElement = $get(ajaxOptions.updateTargetId); + } + var loadingElement = null; + if (ajaxOptions.loadingElementId) { + loadingElement = $get(ajaxOptions.loadingElementId); + } + var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode); + var continueRequest = true; + if (ajaxOptions.onBegin) { + continueRequest = ajaxOptions.onBegin(ajaxContext) !== false; + } + if (loadingElement) { + Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true); + } + if (continueRequest) { + request.add_completed(Function.createDelegate(null, function(executor) { + Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext); + })); + request.invoke(); + } +} +Sys.Mvc.MvcHelpers._onComplete = function Sys_Mvc_MvcHelpers$_onComplete(request, ajaxOptions, ajaxContext) { + /// + /// + /// + /// + /// + /// + ajaxContext.set_response(request.get_executor()); + if (ajaxOptions.onComplete && ajaxOptions.onComplete(ajaxContext) === false) { + return; + } + var statusCode = ajaxContext.get_response().get_statusCode(); + if ((statusCode >= 200 && statusCode < 300) || statusCode === 304 || statusCode === 1223) { + if (statusCode !== 204 && statusCode !== 304 && statusCode !== 1223) { + var contentType = ajaxContext.get_response().getResponseHeader('Content-Type'); + if ((contentType) && (contentType.indexOf('application/x-javascript') !== -1)) { + eval(ajaxContext.get_data()); + } + else { + Sys.Mvc.MvcHelpers.updateDomElement(ajaxContext.get_updateTarget(), ajaxContext.get_insertionMode(), ajaxContext.get_data()); + } + } + if (ajaxOptions.onSuccess) { + ajaxOptions.onSuccess(ajaxContext); + } + } + else { + if (ajaxOptions.onFailure) { + ajaxOptions.onFailure(ajaxContext); + } + } + if (ajaxContext.get_loadingElement()) { + Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), false); + } +} +Sys.Mvc.MvcHelpers.updateDomElement = function Sys_Mvc_MvcHelpers$updateDomElement(target, insertionMode, content) { + /// + /// + /// + /// + /// + /// + if (target) { + switch (insertionMode) { + case Sys.Mvc.InsertionMode.replace: + target.innerHTML = content; + break; + case Sys.Mvc.InsertionMode.insertBefore: + if (content && content.length > 0) { + target.innerHTML = content + target.innerHTML.trimStart(); + } + break; + case Sys.Mvc.InsertionMode.insertAfter: + if (content && content.length > 0) { + target.innerHTML = target.innerHTML.trimEnd() + content; + } + break; + } + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.AsyncForm + +Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() { +} +Sys.Mvc.AsyncForm.handleClick = function Sys_Mvc_AsyncForm$handleClick(form, evt) { + /// + /// + /// + /// + var additionalInput = Sys.Mvc.MvcHelpers._serializeSubmitButton(evt.target, evt.offsetX, evt.offsetY); + form._additionalInput = additionalInput; +} +Sys.Mvc.AsyncForm.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) { + /// + /// + /// + /// + /// + /// + evt.preventDefault(); + var validationCallbacks = form.validationCallbacks; + if (validationCallbacks) { + for (var i = 0; i < validationCallbacks.length; i++) { + var callback = validationCallbacks[i]; + if (!callback()) { + return; + } + } + } + var body = Sys.Mvc.MvcHelpers._serializeForm(form); + Sys.Mvc.MvcHelpers._asyncRequest(form.action, form.method || 'post', body, form, ajaxOptions); +} + + +Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext'); +Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink'); +Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers'); +Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm'); + +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- diff --git a/Web/Scripts/MicrosoftMvcAjax.js b/Web/Scripts/MicrosoftMvcAjax.js new file mode 100644 index 0000000..c5a6165 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcAjax.js @@ -0,0 +1,25 @@ +//---------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//---------------------------------------------------------- +// MicrosoftMvcAjax.js + +Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_AjaxOptions=function(){return {};} +Sys.Mvc.InsertionMode=function(){};Sys.Mvc.InsertionMode.prototype = {replace:0,insertBefore:1,insertAfter:2} +Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode',false);Sys.Mvc.AjaxContext=function(request,updateTarget,loadingElement,insertionMode){this.$3=request;this.$4=updateTarget;this.$1=loadingElement;this.$0=insertionMode;} +Sys.Mvc.AjaxContext.prototype={$0:0,$1:null,$2:null,$3:null,$4:null,get_data:function(){if(this.$2){return this.$2.get_responseData();}else{return null;}},get_insertionMode:function(){return this.$0;},get_loadingElement:function(){return this.$1;},get_object:function(){var $0=this.get_response();return ($0)?$0.get_object():null;},get_response:function(){return this.$2;},set_response:function(value){this.$2=value;return value;},get_request:function(){return this.$3;},get_updateTarget:function(){return this.$4;}} +Sys.Mvc.AsyncHyperlink=function(){} +Sys.Mvc.AsyncHyperlink.handleClick=function(anchor,evt,ajaxOptions){evt.preventDefault();Sys.Mvc.MvcHelpers.$2(anchor.href,'post','',anchor,ajaxOptions);} +Sys.Mvc.MvcHelpers=function(){} +Sys.Mvc.MvcHelpers.$0=function($p0,$p1,$p2){if($p0.disabled){return null;}var $0=$p0.name;if($0){var $1=$p0.tagName.toUpperCase();var $2=encodeURIComponent($0);var $3=$p0;if($1==='INPUT'){var $4=$3.type;if($4==='submit'){return $2+'='+encodeURIComponent($3.value);}else if($4==='image'){return $2+'.x='+$p1+'&'+$2+'.y='+$p2;}}else if(($1==='BUTTON')&&($0.length)&&($3.type==='submit')){return $2+'='+encodeURIComponent($3.value);}}return null;} +Sys.Mvc.MvcHelpers.$1=function($p0){var $0=$p0.elements;var $1=new Sys.StringBuilder();var $2=$0.length;for(var $4=0;$4<$2;$4++){var $5=$0[$4];var $6=$5.name;if(!$6||!$6.length){continue;}var $7=$5.tagName.toUpperCase();if($7==='INPUT'){var $8=$5;var $9=$8.type;if(($9==='text')||($9==='password')||($9==='hidden')||((($9==='checkbox')||($9==='radio'))&&$5.checked)){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent($8.value));$1.append('&');}}else if($7==='SELECT'){var $A=$5;var $B=$A.options.length;for(var $C=0;$C<$B;$C++){var $D=$A.options[$C];if($D.selected){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent($D.value));$1.append('&');}}}else if($7==='TEXTAREA'){$1.append(encodeURIComponent($6));$1.append('=');$1.append(encodeURIComponent(($5.value)));$1.append('&');}}var $3=$p0._additionalInput;if($3){$1.append($3);$1.append('&');}return $1.toString();} +Sys.Mvc.MvcHelpers.$2=function($p0,$p1,$p2,$p3,$p4){if($p4.confirm){if(!confirm($p4.confirm)){return;}}if($p4.url){$p0=$p4.url;}if($p4.httpMethod){$p1=$p4.httpMethod;}if($p2.length>0&&!$p2.endsWith('&')){$p2+='&';}$p2+='X-Requested-With=XMLHttpRequest';var $0=$p1.toUpperCase();var $1=($0==='GET'||$0==='POST');if(!$1){$p2+='&';$p2+='X-HTTP-Method-Override='+$0;}var $2='';if($0==='GET'||$0==='DELETE'){if($p0.indexOf('?')>-1){if(!$p0.endsWith('&')){$p0+='&';}$p0+=$p2;}else{$p0+='?';$p0+=$p2;}}else{$2=$p2;}var $3=new Sys.Net.WebRequest();$3.set_url($p0);if($1){$3.set_httpVerb($p1);}else{$3.set_httpVerb('POST');$3.get_headers()['X-HTTP-Method-Override']=$0;}$3.set_body($2);if($p1.toUpperCase()==='PUT'){$3.get_headers()['Content-Type']='application/x-www-form-urlencoded;';}$3.get_headers()['X-Requested-With']='XMLHttpRequest';var $4=null;if($p4.updateTargetId){$4=$get($p4.updateTargetId);}var $5=null;if($p4.loadingElementId){$5=$get($p4.loadingElementId);}var $6=new Sys.Mvc.AjaxContext($3,$4,$5,$p4.insertionMode);var $7=true;if($p4.onBegin){$7=$p4.onBegin($6)!==false;}if($5){Sys.UI.DomElement.setVisible($6.get_loadingElement(),true);}if($7){$3.add_completed(Function.createDelegate(null,function($p1_0){ +Sys.Mvc.MvcHelpers.$3($3,$p4,$6);}));$3.invoke();}} +Sys.Mvc.MvcHelpers.$3=function($p0,$p1,$p2){$p2.set_response($p0.get_executor());if($p1.onComplete&&$p1.onComplete($p2)===false){return;}var $0=$p2.get_response().get_statusCode();if(($0>=200&&$0<300)||$0===304||$0===1223){if($0!==204&&$0!==304&&$0!==1223){var $1=$p2.get_response().getResponseHeader('Content-Type');if(($1)&&($1.indexOf('application/x-javascript')!==-1)){eval($p2.get_data());}else{Sys.Mvc.MvcHelpers.updateDomElement($p2.get_updateTarget(),$p2.get_insertionMode(),$p2.get_data());}}if($p1.onSuccess){$p1.onSuccess($p2);}}else{if($p1.onFailure){$p1.onFailure($p2);}}if($p2.get_loadingElement()){Sys.UI.DomElement.setVisible($p2.get_loadingElement(),false);}} +Sys.Mvc.MvcHelpers.updateDomElement=function(target,insertionMode,content){if(target){switch(insertionMode){case 0:target.innerHTML=content;break;case 1:if(content&&content.length>0){target.innerHTML=content+target.innerHTML.trimStart();}break;case 2:if(content&&content.length>0){target.innerHTML=target.innerHTML.trimEnd()+content;}break;}}} +Sys.Mvc.AsyncForm=function(){} +Sys.Mvc.AsyncForm.handleClick=function(form,evt){var $0=Sys.Mvc.MvcHelpers.$0(evt.target,evt.offsetX,evt.offsetY);form._additionalInput = $0;} +Sys.Mvc.AsyncForm.handleSubmit=function(form,evt,ajaxOptions){evt.preventDefault();var $0=form.validationCallbacks;if($0){for(var $2=0;$2<$0.length;$2++){var $3=$0[$2];if(!$3()){return;}}}var $1=Sys.Mvc.MvcHelpers.$1(form);Sys.Mvc.MvcHelpers.$2(form.action,form.method||'post',$1,form,ajaxOptions);} +Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm'); +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- diff --git a/Web/Scripts/MicrosoftMvcValidation.debug.js b/Web/Scripts/MicrosoftMvcValidation.debug.js new file mode 100644 index 0000000..346ba48 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcValidation.debug.js @@ -0,0 +1,883 @@ +//!---------------------------------------------------------- +//! Copyright (C) Microsoft Corporation. All rights reserved. +//!---------------------------------------------------------- +//! MicrosoftMvcValidation.js + + +Type.registerNamespace('Sys.Mvc'); + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.Validation + +Sys.Mvc.$create_Validation = function Sys_Mvc_Validation() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.JsonValidationField + +Sys.Mvc.$create_JsonValidationField = function Sys_Mvc_JsonValidationField() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.JsonValidationOptions + +Sys.Mvc.$create_JsonValidationOptions = function Sys_Mvc_JsonValidationOptions() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.JsonValidationRule + +Sys.Mvc.$create_JsonValidationRule = function Sys_Mvc_JsonValidationRule() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.ValidationContext + +Sys.Mvc.$create_ValidationContext = function Sys_Mvc_ValidationContext() { return {}; } + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.NumberValidator + +Sys.Mvc.NumberValidator = function Sys_Mvc_NumberValidator() { +} +Sys.Mvc.NumberValidator.create = function Sys_Mvc_NumberValidator$create(rule) { + /// + /// + /// + return Function.createDelegate(new Sys.Mvc.NumberValidator(), new Sys.Mvc.NumberValidator().validate); +} +Sys.Mvc.NumberValidator.prototype = { + + validate: function Sys_Mvc_NumberValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + var n = Number.parseLocale(value); + return (!isNaN(n)); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.FormContext + +Sys.Mvc.FormContext = function Sys_Mvc_FormContext(formElement, validationSummaryElement) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + this._errors = []; + this.fields = new Array(0); + this._formElement = formElement; + this._validationSummaryElement = validationSummaryElement; + formElement[Sys.Mvc.FormContext._formValidationTag] = this; + if (validationSummaryElement) { + var ulElements = validationSummaryElement.getElementsByTagName('ul'); + if (ulElements.length > 0) { + this._validationSummaryULElement = ulElements[0]; + } + } + this._onClickHandler = Function.createDelegate(this, this._form_OnClick); + this._onSubmitHandler = Function.createDelegate(this, this._form_OnSubmit); +} +Sys.Mvc.FormContext._Application_Load = function Sys_Mvc_FormContext$_Application_Load() { + var allFormOptions = window.mvcClientValidationMetadata; + if (allFormOptions) { + while (allFormOptions.length > 0) { + var thisFormOptions = allFormOptions.pop(); + Sys.Mvc.FormContext._parseJsonOptions(thisFormOptions); + } + } +} +Sys.Mvc.FormContext._getFormElementsWithName = function Sys_Mvc_FormContext$_getFormElementsWithName(formElement, name) { + /// + /// + /// + /// + /// + var allElementsWithNameInForm = []; + var allElementsWithName = document.getElementsByName(name); + for (var i = 0; i < allElementsWithName.length; i++) { + var thisElement = allElementsWithName[i]; + if (Sys.Mvc.FormContext._isElementInHierarchy(formElement, thisElement)) { + Array.add(allElementsWithNameInForm, thisElement); + } + } + return allElementsWithNameInForm; +} +Sys.Mvc.FormContext.getValidationForForm = function Sys_Mvc_FormContext$getValidationForForm(formElement) { + /// + /// + /// + return formElement[Sys.Mvc.FormContext._formValidationTag]; +} +Sys.Mvc.FormContext._isElementInHierarchy = function Sys_Mvc_FormContext$_isElementInHierarchy(parent, child) { + /// + /// + /// + /// + /// + while (child) { + if (parent === child) { + return true; + } + child = child.parentNode; + } + return false; +} +Sys.Mvc.FormContext._parseJsonOptions = function Sys_Mvc_FormContext$_parseJsonOptions(options) { + /// + /// + /// + var formElement = $get(options.FormId); + var validationSummaryElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(options.ValidationSummaryId)) ? $get(options.ValidationSummaryId) : null; + var formContext = new Sys.Mvc.FormContext(formElement, validationSummaryElement); + formContext.enableDynamicValidation(); + formContext.replaceValidationSummary = options.ReplaceValidationSummary; + for (var i = 0; i < options.Fields.length; i++) { + var field = options.Fields[i]; + var fieldElements = Sys.Mvc.FormContext._getFormElementsWithName(formElement, field.FieldName); + var validationMessageElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(field.ValidationMessageId)) ? $get(field.ValidationMessageId) : null; + var fieldContext = new Sys.Mvc.FieldContext(formContext); + Array.addRange(fieldContext.elements, fieldElements); + fieldContext.validationMessageElement = validationMessageElement; + fieldContext.replaceValidationMessageContents = field.ReplaceValidationMessageContents; + for (var j = 0; j < field.ValidationRules.length; j++) { + var rule = field.ValidationRules[j]; + var validator = Sys.Mvc.ValidatorRegistry.getValidator(rule); + if (validator) { + var validation = Sys.Mvc.$create_Validation(); + validation.fieldErrorMessage = rule.ErrorMessage; + validation.validator = validator; + Array.add(fieldContext.validations, validation); + } + } + fieldContext.enableDynamicValidation(); + Array.add(formContext.fields, fieldContext); + } + var registeredValidatorCallbacks = formElement.validationCallbacks; + if (!registeredValidatorCallbacks) { + registeredValidatorCallbacks = []; + formElement.validationCallbacks = registeredValidatorCallbacks; + } + registeredValidatorCallbacks.push(Function.createDelegate(null, function() { + return Sys.Mvc._validationUtil.arrayIsNullOrEmpty(formContext.validate('submit')); + })); + return formContext; +} +Sys.Mvc.FormContext.prototype = { + _onClickHandler: null, + _onSubmitHandler: null, + _submitButtonClicked: null, + _validationSummaryElement: null, + _validationSummaryULElement: null, + _formElement: null, + replaceValidationSummary: false, + + addError: function Sys_Mvc_FormContext$addError(message) { + /// + /// + this.addErrors([ message ]); + }, + + addErrors: function Sys_Mvc_FormContext$addErrors(messages) { + /// + /// + if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) { + Array.addRange(this._errors, messages); + this._onErrorCountChanged(); + } + }, + + clearErrors: function Sys_Mvc_FormContext$clearErrors() { + Array.clear(this._errors); + this._onErrorCountChanged(); + }, + + _displayError: function Sys_Mvc_FormContext$_displayError() { + if (this._validationSummaryElement) { + if (this._validationSummaryULElement) { + Sys.Mvc._validationUtil.removeAllChildren(this._validationSummaryULElement); + for (var i = 0; i < this._errors.length; i++) { + var liElement = document.createElement('li'); + Sys.Mvc._validationUtil.setInnerText(liElement, this._errors[i]); + this._validationSummaryULElement.appendChild(liElement); + } + } + Sys.UI.DomElement.removeCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss); + Sys.UI.DomElement.addCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss); + } + }, + + _displaySuccess: function Sys_Mvc_FormContext$_displaySuccess() { + var validationSummaryElement = this._validationSummaryElement; + if (validationSummaryElement) { + var validationSummaryULElement = this._validationSummaryULElement; + if (validationSummaryULElement) { + validationSummaryULElement.innerHTML = ''; + } + Sys.UI.DomElement.removeCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss); + Sys.UI.DomElement.addCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss); + } + }, + + enableDynamicValidation: function Sys_Mvc_FormContext$enableDynamicValidation() { + Sys.UI.DomEvent.addHandler(this._formElement, 'click', this._onClickHandler); + Sys.UI.DomEvent.addHandler(this._formElement, 'submit', this._onSubmitHandler); + }, + + _findSubmitButton: function Sys_Mvc_FormContext$_findSubmitButton(element) { + /// + /// + /// + if (element.disabled) { + return null; + } + var tagName = element.tagName.toUpperCase(); + var inputElement = element; + if (tagName === 'INPUT') { + var type = inputElement.type; + if (type === 'submit' || type === 'image') { + return inputElement; + } + } + else if ((tagName === 'BUTTON') && (inputElement.type === 'submit')) { + return inputElement; + } + return null; + }, + + _form_OnClick: function Sys_Mvc_FormContext$_form_OnClick(e) { + /// + /// + this._submitButtonClicked = this._findSubmitButton(e.target); + }, + + _form_OnSubmit: function Sys_Mvc_FormContext$_form_OnSubmit(e) { + /// + /// + var form = e.target; + var submitButton = this._submitButtonClicked; + if (submitButton && submitButton.disableValidation) { + return; + } + var errorMessages = this.validate('submit'); + if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(errorMessages)) { + e.preventDefault(); + } + }, + + _onErrorCountChanged: function Sys_Mvc_FormContext$_onErrorCountChanged() { + if (!this._errors.length) { + this._displaySuccess(); + } + else { + this._displayError(); + } + }, + + validate: function Sys_Mvc_FormContext$validate(eventName) { + /// + /// + /// + var fields = this.fields; + var errors = []; + for (var i = 0; i < fields.length; i++) { + var field = fields[i]; + if (!field.elements[0].disabled) { + var thisErrors = field.validate(eventName); + if (thisErrors) { + Array.addRange(errors, thisErrors); + } + } + } + if (this.replaceValidationSummary) { + this.clearErrors(); + this.addErrors(errors); + } + return errors; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.FieldContext + +Sys.Mvc.FieldContext = function Sys_Mvc_FieldContext(formContext) { + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + this._errors = []; + this.elements = new Array(0); + this.validations = new Array(0); + this.formContext = formContext; + this._onBlurHandler = Function.createDelegate(this, this._element_OnBlur); + this._onChangeHandler = Function.createDelegate(this, this._element_OnChange); + this._onInputHandler = Function.createDelegate(this, this._element_OnInput); + this._onPropertyChangeHandler = Function.createDelegate(this, this._element_OnPropertyChange); +} +Sys.Mvc.FieldContext.prototype = { + _onBlurHandler: null, + _onChangeHandler: null, + _onInputHandler: null, + _onPropertyChangeHandler: null, + defaultErrorMessage: null, + formContext: null, + replaceValidationMessageContents: false, + validationMessageElement: null, + + addError: function Sys_Mvc_FieldContext$addError(message) { + /// + /// + this.addErrors([ message ]); + }, + + addErrors: function Sys_Mvc_FieldContext$addErrors(messages) { + /// + /// + if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) { + Array.addRange(this._errors, messages); + this._onErrorCountChanged(); + } + }, + + clearErrors: function Sys_Mvc_FieldContext$clearErrors() { + Array.clear(this._errors); + this._onErrorCountChanged(); + }, + + _displayError: function Sys_Mvc_FieldContext$_displayError() { + var validationMessageElement = this.validationMessageElement; + if (validationMessageElement) { + if (this.replaceValidationMessageContents) { + Sys.Mvc._validationUtil.setInnerText(validationMessageElement, this._errors[0]); + } + Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss); + Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss); + } + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss); + Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss); + } + }, + + _displaySuccess: function Sys_Mvc_FieldContext$_displaySuccess() { + var validationMessageElement = this.validationMessageElement; + if (validationMessageElement) { + if (this.replaceValidationMessageContents) { + Sys.Mvc._validationUtil.setInnerText(validationMessageElement, ''); + } + Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss); + Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss); + } + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss); + Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss); + } + }, + + _element_OnBlur: function Sys_Mvc_FieldContext$_element_OnBlur(e) { + /// + /// + if (e.target[Sys.Mvc.FieldContext._hasTextChangedTag] || e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) { + this.validate('blur'); + } + }, + + _element_OnChange: function Sys_Mvc_FieldContext$_element_OnChange(e) { + /// + /// + e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true; + }, + + _element_OnInput: function Sys_Mvc_FieldContext$_element_OnInput(e) { + /// + /// + e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true; + if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) { + this.validate('input'); + } + }, + + _element_OnPropertyChange: function Sys_Mvc_FieldContext$_element_OnPropertyChange(e) { + /// + /// + if (e.rawEvent.propertyName === 'value') { + e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true; + if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) { + this.validate('input'); + } + } + }, + + enableDynamicValidation: function Sys_Mvc_FieldContext$enableDynamicValidation() { + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + if (Sys.Mvc._validationUtil.elementSupportsEvent(element, 'onpropertychange')) { + var compatMode = document.documentMode; + if (compatMode && compatMode >= 8) { + Sys.UI.DomEvent.addHandler(element, 'propertychange', this._onPropertyChangeHandler); + } + } + else { + Sys.UI.DomEvent.addHandler(element, 'input', this._onInputHandler); + } + Sys.UI.DomEvent.addHandler(element, 'change', this._onChangeHandler); + Sys.UI.DomEvent.addHandler(element, 'blur', this._onBlurHandler); + } + }, + + _getErrorString: function Sys_Mvc_FieldContext$_getErrorString(validatorReturnValue, fieldErrorMessage) { + /// + /// + /// + /// + /// + var fallbackErrorMessage = fieldErrorMessage || this.defaultErrorMessage; + if (Boolean.isInstanceOfType(validatorReturnValue)) { + return (validatorReturnValue) ? null : fallbackErrorMessage; + } + if (String.isInstanceOfType(validatorReturnValue)) { + return ((validatorReturnValue).length) ? validatorReturnValue : fallbackErrorMessage; + } + return null; + }, + + _getStringValue: function Sys_Mvc_FieldContext$_getStringValue() { + /// + var elements = this.elements; + return (elements.length > 0) ? elements[0].value : null; + }, + + _markValidationFired: function Sys_Mvc_FieldContext$_markValidationFired() { + var elements = this.elements; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + element[Sys.Mvc.FieldContext._hasValidationFiredTag] = true; + } + }, + + _onErrorCountChanged: function Sys_Mvc_FieldContext$_onErrorCountChanged() { + if (!this._errors.length) { + this._displaySuccess(); + } + else { + this._displayError(); + } + }, + + validate: function Sys_Mvc_FieldContext$validate(eventName) { + /// + /// + /// + var validations = this.validations; + var errors = []; + var value = this._getStringValue(); + for (var i = 0; i < validations.length; i++) { + var validation = validations[i]; + var context = Sys.Mvc.$create_ValidationContext(); + context.eventName = eventName; + context.fieldContext = this; + context.validation = validation; + var retVal = validation.validator(value, context); + var errorMessage = this._getErrorString(retVal, validation.fieldErrorMessage); + if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(errorMessage)) { + Array.add(errors, errorMessage); + } + } + this._markValidationFired(); + this.clearErrors(); + this.addErrors(errors); + return errors; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.RangeValidator + +Sys.Mvc.RangeValidator = function Sys_Mvc_RangeValidator(minimum, maximum) { + /// + /// + /// + /// + /// + /// + /// + /// + this._minimum = minimum; + this._maximum = maximum; +} +Sys.Mvc.RangeValidator.create = function Sys_Mvc_RangeValidator$create(rule) { + /// + /// + /// + var min = rule.ValidationParameters['min']; + var max = rule.ValidationParameters['max']; + return Function.createDelegate(new Sys.Mvc.RangeValidator(min, max), new Sys.Mvc.RangeValidator(min, max).validate); +} +Sys.Mvc.RangeValidator.prototype = { + _minimum: null, + _maximum: null, + + validate: function Sys_Mvc_RangeValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + var n = Number.parseLocale(value); + return (!isNaN(n) && this._minimum <= n && n <= this._maximum); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.RegularExpressionValidator + +Sys.Mvc.RegularExpressionValidator = function Sys_Mvc_RegularExpressionValidator(pattern) { + /// + /// + /// + /// + this._pattern = pattern; +} +Sys.Mvc.RegularExpressionValidator.create = function Sys_Mvc_RegularExpressionValidator$create(rule) { + /// + /// + /// + var pattern = rule.ValidationParameters['pattern']; + return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator(pattern), new Sys.Mvc.RegularExpressionValidator(pattern).validate); +} +Sys.Mvc.RegularExpressionValidator.prototype = { + _pattern: null, + + validate: function Sys_Mvc_RegularExpressionValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + var regExp = new RegExp(this._pattern); + var matches = regExp.exec(value); + return (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(matches) && matches[0].length === value.length); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.RequiredValidator + +Sys.Mvc.RequiredValidator = function Sys_Mvc_RequiredValidator() { +} +Sys.Mvc.RequiredValidator.create = function Sys_Mvc_RequiredValidator$create(rule) { + /// + /// + /// + return Function.createDelegate(new Sys.Mvc.RequiredValidator(), new Sys.Mvc.RequiredValidator().validate); +} +Sys.Mvc.RequiredValidator._isRadioInputElement = function Sys_Mvc_RequiredValidator$_isRadioInputElement(element) { + /// + /// + /// + if (element.tagName.toUpperCase() === 'INPUT') { + var inputType = (element.type).toUpperCase(); + if (inputType === 'RADIO') { + return true; + } + } + return false; +} +Sys.Mvc.RequiredValidator._isSelectInputElement = function Sys_Mvc_RequiredValidator$_isSelectInputElement(element) { + /// + /// + /// + if (element.tagName.toUpperCase() === 'SELECT') { + return true; + } + return false; +} +Sys.Mvc.RequiredValidator._isTextualInputElement = function Sys_Mvc_RequiredValidator$_isTextualInputElement(element) { + /// + /// + /// + if (element.tagName.toUpperCase() === 'INPUT') { + var inputType = (element.type).toUpperCase(); + switch (inputType) { + case 'TEXT': + case 'PASSWORD': + case 'FILE': + return true; + } + } + if (element.tagName.toUpperCase() === 'TEXTAREA') { + return true; + } + return false; +} +Sys.Mvc.RequiredValidator._validateRadioInput = function Sys_Mvc_RequiredValidator$_validateRadioInput(elements) { + /// + /// + /// + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; + if (element.checked) { + return true; + } + } + return false; +} +Sys.Mvc.RequiredValidator._validateSelectInput = function Sys_Mvc_RequiredValidator$_validateSelectInput(optionElements) { + /// + /// + /// + for (var i = 0; i < optionElements.length; i++) { + var element = optionElements[i]; + if (element.selected) { + if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)) { + return true; + } + } + } + return false; +} +Sys.Mvc.RequiredValidator._validateTextualInput = function Sys_Mvc_RequiredValidator$_validateTextualInput(element) { + /// + /// + /// + return (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)); +} +Sys.Mvc.RequiredValidator.prototype = { + + validate: function Sys_Mvc_RequiredValidator$validate(value, context) { + /// + /// + /// + /// + /// + var elements = context.fieldContext.elements; + if (!elements.length) { + return true; + } + var sampleElement = elements[0]; + if (Sys.Mvc.RequiredValidator._isTextualInputElement(sampleElement)) { + return Sys.Mvc.RequiredValidator._validateTextualInput(sampleElement); + } + if (Sys.Mvc.RequiredValidator._isRadioInputElement(sampleElement)) { + return Sys.Mvc.RequiredValidator._validateRadioInput(elements); + } + if (Sys.Mvc.RequiredValidator._isSelectInputElement(sampleElement)) { + return Sys.Mvc.RequiredValidator._validateSelectInput((sampleElement).options); + } + return true; + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.StringLengthValidator + +Sys.Mvc.StringLengthValidator = function Sys_Mvc_StringLengthValidator(minLength, maxLength) { + /// + /// + /// + /// + /// + /// + /// + /// + this._minLength = minLength; + this._maxLength = maxLength; +} +Sys.Mvc.StringLengthValidator.create = function Sys_Mvc_StringLengthValidator$create(rule) { + /// + /// + /// + var minLength = (rule.ValidationParameters['min'] || 0); + var maxLength = (rule.ValidationParameters['max'] || Number.MAX_VALUE); + return Function.createDelegate(new Sys.Mvc.StringLengthValidator(minLength, maxLength), new Sys.Mvc.StringLengthValidator(minLength, maxLength).validate); +} +Sys.Mvc.StringLengthValidator.prototype = { + _maxLength: 0, + _minLength: 0, + + validate: function Sys_Mvc_StringLengthValidator$validate(value, context) { + /// + /// + /// + /// + /// + if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) { + return true; + } + return (this._minLength <= value.length && value.length <= this._maxLength); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc._validationUtil + +Sys.Mvc._validationUtil = function Sys_Mvc__validationUtil() { +} +Sys.Mvc._validationUtil.arrayIsNullOrEmpty = function Sys_Mvc__validationUtil$arrayIsNullOrEmpty(array) { + /// + /// + /// + return (!array || !array.length); +} +Sys.Mvc._validationUtil.stringIsNullOrEmpty = function Sys_Mvc__validationUtil$stringIsNullOrEmpty(value) { + /// + /// + /// + return (!value || !value.length); +} +Sys.Mvc._validationUtil.elementSupportsEvent = function Sys_Mvc__validationUtil$elementSupportsEvent(element, eventAttributeName) { + /// + /// + /// + /// + /// + return (eventAttributeName in element); +} +Sys.Mvc._validationUtil.removeAllChildren = function Sys_Mvc__validationUtil$removeAllChildren(element) { + /// + /// + while (element.firstChild) { + element.removeChild(element.firstChild); + } +} +Sys.Mvc._validationUtil.setInnerText = function Sys_Mvc__validationUtil$setInnerText(element, innerText) { + /// + /// + /// + /// + var textNode = document.createTextNode(innerText); + Sys.Mvc._validationUtil.removeAllChildren(element); + element.appendChild(textNode); +} + + +//////////////////////////////////////////////////////////////////////////////// +// Sys.Mvc.ValidatorRegistry + +Sys.Mvc.ValidatorRegistry = function Sys_Mvc_ValidatorRegistry() { + /// + /// +} +Sys.Mvc.ValidatorRegistry.getValidator = function Sys_Mvc_ValidatorRegistry$getValidator(rule) { + /// + /// + /// + var creator = Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType]; + return (creator) ? creator(rule) : null; +} +Sys.Mvc.ValidatorRegistry._getDefaultValidators = function Sys_Mvc_ValidatorRegistry$_getDefaultValidators() { + /// + return { required: Function.createDelegate(null, Sys.Mvc.RequiredValidator.create), length: Function.createDelegate(null, Sys.Mvc.StringLengthValidator.create), regex: Function.createDelegate(null, Sys.Mvc.RegularExpressionValidator.create), range: Function.createDelegate(null, Sys.Mvc.RangeValidator.create), number: Function.createDelegate(null, Sys.Mvc.NumberValidator.create) }; +} + + +Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator'); +Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext'); +Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext'); +Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator'); +Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator'); +Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator'); +Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator'); +Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil'); +Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry'); +Sys.Mvc.FormContext._validationSummaryErrorCss = 'validation-summary-errors'; +Sys.Mvc.FormContext._validationSummaryValidCss = 'validation-summary-valid'; +Sys.Mvc.FormContext._formValidationTag = '__MVC_FormValidation'; +Sys.Mvc.FieldContext._hasTextChangedTag = '__MVC_HasTextChanged'; +Sys.Mvc.FieldContext._hasValidationFiredTag = '__MVC_HasValidationFired'; +Sys.Mvc.FieldContext._inputElementErrorCss = 'input-validation-error'; +Sys.Mvc.FieldContext._inputElementValidCss = 'input-validation-valid'; +Sys.Mvc.FieldContext._validationMessageErrorCss = 'field-validation-error'; +Sys.Mvc.FieldContext._validationMessageValidCss = 'field-validation-valid'; +Sys.Mvc.ValidatorRegistry.validators = Sys.Mvc.ValidatorRegistry._getDefaultValidators(); + +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- + +// register validation +Sys.Application.add_load(function() { + Sys.Application.remove_load(arguments.callee); + Sys.Mvc.FormContext._Application_Load(); +}); diff --git a/Web/Scripts/MicrosoftMvcValidation.js b/Web/Scripts/MicrosoftMvcValidation.js new file mode 100644 index 0000000..9483492 --- /dev/null +++ b/Web/Scripts/MicrosoftMvcValidation.js @@ -0,0 +1,55 @@ +//---------------------------------------------------------- +// Copyright (C) Microsoft Corporation. All rights reserved. +//---------------------------------------------------------- +// MicrosoftMvcValidation.js + +Type.registerNamespace('Sys.Mvc');Sys.Mvc.$create_Validation=function(){return {};} +Sys.Mvc.$create_JsonValidationField=function(){return {};} +Sys.Mvc.$create_JsonValidationOptions=function(){return {};} +Sys.Mvc.$create_JsonValidationRule=function(){return {};} +Sys.Mvc.$create_ValidationContext=function(){return {};} +Sys.Mvc.NumberValidator=function(){} +Sys.Mvc.NumberValidator.create=function(rule){return Function.createDelegate(new Sys.Mvc.NumberValidator(),new Sys.Mvc.NumberValidator().validate);} +Sys.Mvc.NumberValidator.prototype={validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=Number.parseLocale(value);return (!isNaN($0));}} +Sys.Mvc.FormContext=function(formElement,validationSummaryElement){this.$5=[];this.fields=new Array(0);this.$9=formElement;this.$7=validationSummaryElement;formElement['__MVC_FormValidation'] = this;if(validationSummaryElement){var $0=validationSummaryElement.getElementsByTagName('ul');if($0.length>0){this.$8=$0[0];}}this.$3=Function.createDelegate(this,this.$D);this.$4=Function.createDelegate(this,this.$E);} +Sys.Mvc.FormContext._Application_Load=function(){var $0=window.mvcClientValidationMetadata;if($0){while($0.length>0){var $1=$0.pop();Sys.Mvc.FormContext.$12($1);}}} +Sys.Mvc.FormContext.$F=function($p0,$p1){var $0=[];var $1=document.getElementsByName($p1);for(var $2=0;$2<$1.length;$2++){var $3=$1[$2];if(Sys.Mvc.FormContext.$10($p0,$3)){Array.add($0,$3);}}return $0;} +Sys.Mvc.FormContext.getValidationForForm=function(formElement){return formElement['__MVC_FormValidation'];} +Sys.Mvc.FormContext.$10=function($p0,$p1){while($p1){if($p0===$p1){return true;}$p1=$p1.parentNode;}return false;} +Sys.Mvc.FormContext.$12=function($p0){var $0=$get($p0.FormId);var $1=(!Sys.Mvc._ValidationUtil.$1($p0.ValidationSummaryId))?$get($p0.ValidationSummaryId):null;var $2=new Sys.Mvc.FormContext($0,$1);$2.enableDynamicValidation();$2.replaceValidationSummary=$p0.ReplaceValidationSummary;for(var $4=0;$4<$p0.Fields.length;$4++){var $5=$p0.Fields[$4];var $6=Sys.Mvc.FormContext.$F($0,$5.FieldName);var $7=(!Sys.Mvc._ValidationUtil.$1($5.ValidationMessageId))?$get($5.ValidationMessageId):null;var $8=new Sys.Mvc.FieldContext($2);Array.addRange($8.elements,$6);$8.validationMessageElement=$7;$8.replaceValidationMessageContents=$5.ReplaceValidationMessageContents;for(var $9=0;$9<$5.ValidationRules.length;$9++){var $A=$5.ValidationRules[$9];var $B=Sys.Mvc.ValidatorRegistry.getValidator($A);if($B){var $C=Sys.Mvc.$create_Validation();$C.fieldErrorMessage=$A.ErrorMessage;$C.validator=$B;Array.add($8.validations,$C);}}$8.enableDynamicValidation();Array.add($2.fields,$8);}var $3=$0.validationCallbacks;if(!$3){$3=[];$0.validationCallbacks = $3;}$3.push(Function.createDelegate(null,function(){ +return Sys.Mvc._ValidationUtil.$0($2.validate('submit'));}));return $2;} +Sys.Mvc.FormContext.prototype={$3:null,$4:null,$6:null,$7:null,$8:null,$9:null,replaceValidationSummary:false,addError:function(message){this.addErrors([message]);},addErrors:function(messages){if(!Sys.Mvc._ValidationUtil.$0(messages)){Array.addRange(this.$5,messages);this.$11();}},clearErrors:function(){Array.clear(this.$5);this.$11();},$A:function(){if(this.$7){if(this.$8){Sys.Mvc._ValidationUtil.$3(this.$8);for(var $0=0;$0=8){Sys.UI.DomEvent.addHandler($2,'propertychange',this.$9);}}else{Sys.UI.DomEvent.addHandler($2,'input',this.$8);}Sys.UI.DomEvent.addHandler($2,'change',this.$7);Sys.UI.DomEvent.addHandler($2,'blur',this.$6);}},$11:function($p0,$p1){var $0=$p1||this.defaultErrorMessage;if(Boolean.isInstanceOfType($p0)){return ($p0)?null:$0;}if(String.isInstanceOfType($p0)){return (($p0).length)?$p0:$0;}return null;},$12:function(){var $0=this.elements;return ($0.length>0)?$0[0].value:null;},$13:function(){var $0=this.elements;for(var $1=0;$1<$0.length;$1++){var $2=$0[$1];$2['__MVC_HasValidationFired'] = true;}},$14:function(){if(!this.$A.length){this.$C();}else{this.$B();}},validate:function(eventName){var $0=this.validations;var $1=[];var $2=this.$12();for(var $3=0;$3<$0.length;$3++){var $4=$0[$3];var $5=Sys.Mvc.$create_ValidationContext();$5.eventName=eventName;$5.fieldContext=this;$5.validation=$4;var $6=$4.validator($2,$5);var $7=this.$11($6,$4.fieldErrorMessage);if(!Sys.Mvc._ValidationUtil.$1($7)){Array.add($1,$7);}}this.$13();this.clearErrors();this.addErrors($1);return $1;}} +Sys.Mvc.RangeValidator=function(minimum,maximum){this.$0=minimum;this.$1=maximum;} +Sys.Mvc.RangeValidator.create=function(rule){var $0=rule.ValidationParameters['min'];var $1=rule.ValidationParameters['max'];return Function.createDelegate(new Sys.Mvc.RangeValidator($0,$1),new Sys.Mvc.RangeValidator($0,$1).validate);} +Sys.Mvc.RangeValidator.prototype={$0:null,$1:null,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=Number.parseLocale(value);return (!isNaN($0)&&this.$0<=$0&&$0<=this.$1);}} +Sys.Mvc.RegularExpressionValidator=function(pattern){this.$0=pattern;} +Sys.Mvc.RegularExpressionValidator.create=function(rule){var $0=rule.ValidationParameters['pattern'];return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator($0),new Sys.Mvc.RegularExpressionValidator($0).validate);} +Sys.Mvc.RegularExpressionValidator.prototype={$0:null,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}var $0=new RegExp(this.$0);var $1=$0.exec(value);return (!Sys.Mvc._ValidationUtil.$0($1)&&$1[0].length===value.length);}} +Sys.Mvc.RequiredValidator=function(){} +Sys.Mvc.RequiredValidator.create=function(rule){return Function.createDelegate(new Sys.Mvc.RequiredValidator(),new Sys.Mvc.RequiredValidator().validate);} +Sys.Mvc.RequiredValidator.$0=function($p0){if($p0.tagName.toUpperCase()==='INPUT'){var $0=($p0.type).toUpperCase();if($0==='RADIO'){return true;}}return false;} +Sys.Mvc.RequiredValidator.$1=function($p0){if($p0.tagName.toUpperCase()==='SELECT'){return true;}return false;} +Sys.Mvc.RequiredValidator.$2=function($p0){if($p0.tagName.toUpperCase()==='INPUT'){var $0=($p0.type).toUpperCase();switch($0){case 'TEXT':case 'PASSWORD':case 'FILE':return true;}}if($p0.tagName.toUpperCase()==='TEXTAREA'){return true;}return false;} +Sys.Mvc.RequiredValidator.$3=function($p0){for(var $0=0;$0<$p0.length;$0++){var $1=$p0[$0];if($1.checked){return true;}}return false;} +Sys.Mvc.RequiredValidator.$4=function($p0){for(var $0=0;$0<$p0.length;$0++){var $1=$p0[$0];if($1.selected){if(!Sys.Mvc._ValidationUtil.$1($1.value)){return true;}}}return false;} +Sys.Mvc.RequiredValidator.$5=function($p0){return (!Sys.Mvc._ValidationUtil.$1($p0.value));} +Sys.Mvc.RequiredValidator.prototype={validate:function(value,context){var $0=context.fieldContext.elements;if(!$0.length){return true;}var $1=$0[0];if(Sys.Mvc.RequiredValidator.$2($1)){return Sys.Mvc.RequiredValidator.$5($1);}if(Sys.Mvc.RequiredValidator.$0($1)){return Sys.Mvc.RequiredValidator.$3($0);}if(Sys.Mvc.RequiredValidator.$1($1)){return Sys.Mvc.RequiredValidator.$4(($1).options);}return true;}} +Sys.Mvc.StringLengthValidator=function(minLength,maxLength){this.$1=minLength;this.$0=maxLength;} +Sys.Mvc.StringLengthValidator.create=function(rule){var $0=(rule.ValidationParameters['min']||0);var $1=(rule.ValidationParameters['max']||Number.MAX_VALUE);return Function.createDelegate(new Sys.Mvc.StringLengthValidator($0,$1),new Sys.Mvc.StringLengthValidator($0,$1).validate);} +Sys.Mvc.StringLengthValidator.prototype={$0:0,$1:0,validate:function(value,context){if(Sys.Mvc._ValidationUtil.$1(value)){return true;}return (this.$1<=value.length&&value.length<=this.$0);}} +Sys.Mvc._ValidationUtil=function(){} +Sys.Mvc._ValidationUtil.$0=function($p0){return (!$p0||!$p0.length);} +Sys.Mvc._ValidationUtil.$1=function($p0){return (!$p0||!$p0.length);} +Sys.Mvc._ValidationUtil.$2=function($p0,$p1){return ($p1 in $p0);} +Sys.Mvc._ValidationUtil.$3=function($p0){while($p0.firstChild){$p0.removeChild($p0.firstChild);}} +Sys.Mvc._ValidationUtil.$4=function($p0,$p1){var $0=document.createTextNode($p1);Sys.Mvc._ValidationUtil.$3($p0);$p0.appendChild($0);} +Sys.Mvc.ValidatorRegistry=function(){} +Sys.Mvc.ValidatorRegistry.getValidator=function(rule){var $0=Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];return ($0)?$0(rule):null;} +Sys.Mvc.ValidatorRegistry.$0=function(){return {required:Function.createDelegate(null,Sys.Mvc.RequiredValidator.create),length:Function.createDelegate(null,Sys.Mvc.StringLengthValidator.create),regex:Function.createDelegate(null,Sys.Mvc.RegularExpressionValidator.create),range:Function.createDelegate(null,Sys.Mvc.RangeValidator.create),number:Function.createDelegate(null,Sys.Mvc.NumberValidator.create)};} +Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');Sys.Mvc._ValidationUtil.registerClass('Sys.Mvc._ValidationUtil');Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');Sys.Mvc.ValidatorRegistry.validators=Sys.Mvc.ValidatorRegistry.$0(); +// ---- Do not remove this footer ---- +// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) +// ----------------------------------- +Sys.Application.add_load(function(){Sys.Application.remove_load(arguments.callee);Sys.Mvc.FormContext._Application_Load();}); \ No newline at end of file diff --git a/Web/Scripts/Shared/Site.js b/Web/Scripts/Shared/Site.js new file mode 100644 index 0000000..18f8c06 --- /dev/null +++ b/Web/Scripts/Shared/Site.js @@ -0,0 +1,152 @@ +$(function () { + $("tbody > tr:odd").addClass("odd"); + $("input:submit, .ui-button").button(); + $("input#Date").datepicker({ maxDate: '+0d' }); + $(".display-field-container") + .filter(".source,.userHostAddress,.userAgent") + .children(".display-label") + .css('text-decoration', 'underline') + .click(function () { + $(this).parent().children('.display-field').toggle(); + }) + .end() + .children('.display-field').hide(); + $("input#CityName").autocomplete({ + source: "/City/Autocomplete", + minLength: 2 + }); + $("input#EmployeeName, input#Assigned").autocomplete({ + source: "/Employee/Autocomplete", + minLength: 2 + }); + $("form select#Year").change(function () { + $.getJSON('/Log/GetValidLogMonths', { year: $(this).val() }, function (months) { + var options = ''; + for (var i = 0; i < months.length; i++) { + options += ''; + } + $("form select#Month").html(options); + }); + }); + $("input#ModelYear,input#Price,input#VehicleId,input#EndOdometer,input#GasPurchased").numeric(); + $(".report-miles").each(function () { + var content = $(this).next('.report-calculation'); + $(this).qtip({ + content: content, + hide: { fixed: true, delay: 1000 }, + style: { + name: 'light', + width: 400 + } + }); + }); + + $(".miles-unknown").addClass('ui-state-error').append('') + .each(function () { + $(this).qtip({ + content: "No previous log for this vehicle", + style: { + name: 'red' + } + }); + }); + + $("a.qtip-modal").each(function () { bindQtipModal($(this)); }); + + $("input#EmployeeName").after(''); + + function employeeHistoryKeydownHandler(data) { + employeeHistoryIconUpdate($(data.target), $("#icon-employee-history")); + } + + function employeeHistoryIconUpdate($input, $icon) { + if (!$input.hasClass("input-validation-error") // not invalid + && $input.attr("value").length > 0) // has text + $icon.removeClass("transparent"); + else + $icon.addClass("transparent"); + } + + $("input#EmployeeName").change(employeeHistoryKeydownHandler).keydown(employeeHistoryKeydownHandler); + + employeeHistoryIconUpdate($("input#EmployeeName"), $("#icon-employee-history")); + + $("#icon-employee-history").qtip({ + content: '

Recent Logs...

', + api: { + beforeShow: function () { + var qt = this; + $.ajax( + { + url: "CreateLog/RecentLogs", + data: { employeeName: $("input#EmployeeName").val() }, + success: function (data) { + qt.updateContent(data, true); + } + }); + } + }, + style: { + width: 320, + border: { + color: '#81B3B3' + } + }, + hide: { + fixed: true, + delay: 500 + } + }); + + if ($('input#VehicleId').length > 0) { + // var settings = $('form').validate().settings; + + // settings.onkeyup = false; + // settings.onfocusout = function (element) { $(element).valid(); }; + + // var oldSuccessFunction = settings.success; + + // settings.success = function (label) { + // alert("success"); + + // oldSuccessFunction(label); + // }; + } +}); + +function bindQtipModal(element) { + var corner = { + target: 'topLeft', + tooltip: 'bottomCenter' + }; + var tip = 'bottomLeft'; + if (element.hasClass("below")) { + corner = { + target: 'bottomMiddle', + tooltip: 'topRight' + }; + tip = 'topRight'; + } + + element.click(function () { return false; }); + + element.append(''); + + element.qtip({ + content: { + url: element.attr('href') + }, + hide: { + fixed: true, + delay: 500 + }, + position: { + corner: corner + }, + style: { + name: 'light', + tip: tip, + width: 300 + } + }); +} \ No newline at end of file diff --git a/Web/Scripts/jquery-1.7.2-vsdoc.js b/Web/Scripts/jquery-1.7.2-vsdoc.js new file mode 100644 index 0000000..bb466aa --- /dev/null +++ b/Web/Scripts/jquery-1.7.2-vsdoc.js @@ -0,0 +1,7223 @@ +/* +* This file has been generated to support Visual Studio IntelliSense. +* You should not use this file at runtime inside the browser--it is only +* intended to be used only for design-time IntelliSense. Please use the +* standard jQuery library for all production use. +* +* Comment version: 1.7.2 +*/ + +/*! +* jQuery JavaScript Library v1.7.2 +* http://jquery.com/ +* +* Distributed in whole under the terms of the MIT +* +* Copyright 2010, John Resig +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +* Includes Sizzle.js +* http://sizzlejs.com/ +* Copyright 2010, The Dojo Foundation +* Released under the MIT and BSD Licenses. +*/ + +(function (window, undefined) { + var jQuery = function (selector, context) { + /// + /// 1: Accepts a string containing a CSS selector which is then used to match a set of elements. + /// 1.1 - $(selector, context) + /// 1.2 - $(element) + /// 1.3 - $(object) + /// 1.4 - $(elementArray) + /// 1.5 - $(jQuery object) + /// 1.6 - $() + /// 2: Creates DOM elements on the fly from the provided string of raw HTML. + /// 2.1 - $(html, ownerDocument) + /// 2.2 - $(html, props) + /// 3: Binds a function to be executed when the DOM has finished loading. + /// 3.1 - $(callback) + /// + /// + /// A string containing a selector expression + /// + /// + /// A DOM Element, Document, or jQuery to use as context + /// + /// + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.Callbacks = function (flags) { + /// + /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. + /// + /// + /// An optional list of space-separated flags that change how the callback list behaves. + /// + + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? (flagsCache[flags] || createFlags(flags)) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function (args) { + var i, + length, + elem, + type, + actual; + for (i = 0, length = args.length; i < length; i++) { + elem = args[i]; + type = jQuery.type(elem); + if (type === "array") { + // Inspect recursively + add(elem); + } else if (type === "function") { + // Add if not in unique mode and callback is not in + if (!flags.unique || !self.has(elem)) { + list.push(elem); + } + } + } + }, + // Fire callbacks + fire = function (context, args) { + args = args || []; + memory = !flags.memory || [context, args]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for (; list && firingIndex < firingLength; firingIndex++) { + if (list[firingIndex].apply(context, args) === false && flags.stopOnFalse) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if (list) { + if (!flags.once) { + if (stack && stack.length) { + memory = stack.shift(); + self.fireWith(memory[0], memory[1]); + } + } else if (memory === true) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function () { + if (list) { + var length = list.length; + add(arguments); + // Do we need to add the callbacks to the + // current firing batch? + if (firing) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if (memory && memory !== true) { + firingStart = length; + fire(memory[0], memory[1]); + } + } + return this; + }, + // Remove a callback from the list + remove: function () { + if (list) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for (; argIndex < argLength ; argIndex++) { + for (var i = 0; i < list.length; i++) { + if (args[argIndex] === list[i]) { + // Handle firingIndex and firingLength + if (firing) { + if (i <= firingLength) { + firingLength--; + if (i <= firingIndex) { + firingIndex--; + } + } + } + // Remove the element + list.splice(i--, 1); + // If we have some unicity property then + // we only need to do this once + if (flags.unique) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function (fn) { + if (list) { + var i = 0, + length = list.length; + for (; i < length; i++) { + if (fn === list[i]) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function () { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function () { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function () { + return !list; + }, + // Lock the list in its current state + lock: function () { + stack = undefined; + if (!memory || memory === true) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function () { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function (context, args) { + if (stack) { + if (firing) { + if (!flags.once) { + stack.push([context, args]); + } + } else if (!(flags.once && memory)) { + fire(context, args); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function () { + self.fireWith(this, arguments); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function () { + return !!fired; + } + }; + + return self; + }; + jQuery.Deferred = function (func) { + + var doneList = jQuery.Callbacks("once memory"), + failList = jQuery.Callbacks("once memory"), + progressList = jQuery.Callbacks("memory"), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function () { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function (doneCallbacks, failCallbacks, progressCallbacks) { + deferred.done(doneCallbacks).fail(failCallbacks).progress(progressCallbacks); + return this; + }, + always: function () { + deferred.done.apply(deferred, arguments).fail.apply(deferred, arguments); + return this; + }, + pipe: function (fnDone, fnFail, fnProgress) { + return jQuery.Deferred(function (newDefer) { + jQuery.each({ + done: [fnDone, "resolve"], + fail: [fnFail, "reject"], + progress: [fnProgress, "notify"] + }, function (handler, data) { + var fn = data[0], + action = data[1], + returned; + if (jQuery.isFunction(fn)) { + deferred[handler](function () { + returned = fn.apply(this, arguments); + if (returned && jQuery.isFunction(returned.promise)) { + returned.promise().then(newDefer.resolve, newDefer.reject, newDefer.notify); + } else { + newDefer[action + "With"](this === deferred ? newDefer : this, [returned]); + } + }); + } else { + deferred[handler](newDefer[action]); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function (obj) { + if (obj == null) { + obj = promise; + } else { + for (var key in promise) { + obj[key] = promise[key]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for (key in lists) { + deferred[key] = lists[key].fire; + deferred[key + "With"] = lists[key].fireWith; + } + + // Handle state + deferred.done(function () { + state = "resolved"; + }, failList.disable, progressList.lock).fail(function () { + state = "rejected"; + }, doneList.disable, progressList.lock); + + // Call given func if any + if (func) { + func.call(deferred, deferred); + } + + // All done! + return deferred; + }; + jQuery.Event = function (src, props) { + + // Allow instantiation without the 'new' keyword + if (!(this instanceof jQuery.Event)) { + return new jQuery.Event(src, props); + } + + // Event object + if (src && src.type) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if (props) { + jQuery.extend(this, props); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[jQuery.expando] = true; + }; + jQuery._data = function (elem, name, data) { + + return jQuery.data(elem, name, data, true); + }; + jQuery._mark = function (elem, type) { + + if (elem) { + type = (type || "fx") + "mark"; + jQuery._data(elem, type, (jQuery._data(elem, type) || 0) + 1); + } + }; + jQuery._unmark = function (force, elem, type) { + + if (force !== true) { + type = elem; + elem = force; + force = false; + } + if (elem) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ((jQuery._data(elem, key) || 1) - 1); + if (count) { + jQuery._data(elem, key, count); + } else { + jQuery.removeData(elem, key, true); + handleQueueMarkDefer(elem, type, "mark"); + } + } + }; + jQuery.acceptData = function (elem) { + + if (elem.nodeName) { + var match = jQuery.noData[elem.nodeName.toLowerCase()]; + + if (match) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + }; + jQuery.access = function (elems, fn, key, value, chainable, emptyGet, pass) { + + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if (key && typeof key === "object") { + for (i in key) { + jQuery.access(elems, fn, i, key[i], 1, emptyGet, value); + } + chainable = 1; + + // Sets one value + } else if (value !== undefined) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction(value); + + if (bulk) { + // Bulk operations only iterate when executing function values + if (exec) { + exec = fn; + fn = function (elem, key, value) { + return exec.call(jQuery(elem), value); + }; + + // Otherwise they run against the entire set + } else { + fn.call(elems, value); + fn = null; + } + } + + if (fn) { + for (; i < length; i++) { + fn(elems[i], key, exec ? value.call(elems[i], i, fn(elems[i], key)) : value, pass); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call(elems) : + length ? fn(elems[0], key) : emptyGet; + }; + jQuery.active = 0; + jQuery.ajax = function (url, options) { + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// 1 - jQuery.ajax(url, settings) + /// 2 - jQuery.ajax(settings) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. + /// + + + // If url is an object, simulate pre-1.5 signature + if (typeof url === "object") { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // Create the final options object + s = jQuery.ajaxSetup({}, options), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + (callbackContext.nodeType || callbackContext instanceof jQuery) ? + jQuery(callbackContext) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // ifModified key + ifModifiedKey, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // The jqXHR state + state = 0, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function (name, value) { + if (!state) { + var lname = name.toLowerCase(); + name = requestHeadersNames[lname] = requestHeadersNames[lname] || name; + requestHeaders[name] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function () { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function (key) { + var match; + if (state === 2) { + if (!responseHeaders) { + responseHeaders = {}; + while ((match = rheaders.exec(responseHeadersString))) { + responseHeaders[match[1].toLowerCase()] = match[2]; + } + } + match = responseHeaders[key.toLowerCase()]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function (type) { + if (!state) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function (statusText) { + statusText = statusText || "abort"; + if (transport) { + transport.abort(statusText); + } + done(0, statusText); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done(status, nativeStatusText, responses, headers) { + + // Called once + if (state === 2) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if (timeoutTimer) { + clearTimeout(timeoutTimer); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + var isSuccess, + success, + error, + statusText = nativeStatusText, + response = responses ? ajaxHandleResponses(s, jqXHR, responses) : undefined, + lastModified, + etag; + + // If successful, handle type chaining + if (status >= 200 && status < 300 || status === 304) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if (s.ifModified) { + + if ((lastModified = jqXHR.getResponseHeader("Last-Modified"))) { + jQuery.lastModified[ifModifiedKey] = lastModified; + } + if ((etag = jqXHR.getResponseHeader("Etag"))) { + jQuery.etag[ifModifiedKey] = etag; + } + } + + // If not modified + if (status === 304) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + try { + success = ajaxConvert(s, response); + statusText = "success"; + isSuccess = true; + } catch (e) { + // We have a parsererror + statusText = "parsererror"; + error = e; + } + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if (!statusText || status) { + statusText = "error"; + if (status < 0) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = "" + (nativeStatusText || statusText); + + // Success/Error + if (isSuccess) { + deferred.resolveWith(callbackContext, [success, statusText, jqXHR]); + } else { + deferred.rejectWith(callbackContext, [jqXHR, statusText, error]); + } + + // Status-dependent callbacks + jqXHR.statusCode(statusCode); + statusCode = undefined; + + if (fireGlobals) { + globalEventContext.trigger("ajax" + (isSuccess ? "Success" : "Error"), + [jqXHR, s, isSuccess ? success : error]); + } + + // Complete + completeDeferred.fireWith(callbackContext, [jqXHR, statusText]); + + if (fireGlobals) { + globalEventContext.trigger("ajaxComplete", [jqXHR, s]); + // Handle the global AJAX counter + if (!(--jQuery.active)) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + // Attach deferreds + deferred.promise(jqXHR); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function (map) { + if (map) { + var tmp; + if (state < 2) { + for (tmp in map) { + statusCode[tmp] = [statusCode[tmp], map[tmp]]; + } + } else { + tmp = map[jqXHR.status]; + jqXHR.then(tmp, tmp); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ((url || s.url) + "").replace(rhash, "").replace(rprotocol, ajaxLocParts[1] + "//"); + + // Extract dataTypes list + s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().split(rspacesAjax); + + // Determine if a cross-domain request is in order + if (s.crossDomain == null) { + parts = rurl.exec(s.url.toLowerCase()); + s.crossDomain = !!(parts && + (parts[1] != ajaxLocParts[1] || parts[2] != ajaxLocParts[2] || + (parts[3] || (parts[1] === "http:" ? 80 : 443)) != + (ajaxLocParts[3] || (ajaxLocParts[1] === "http:" ? 80 : 443))) + ); + } + + // Convert data if not already a string + if (s.data && s.processData && typeof s.data !== "string") { + s.data = jQuery.param(s.data, s.traditional); + } + + // Apply prefilters + inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); + + // If request was aborted inside a prefilter, stop there + if (state === 2) { + return false; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test(s.type); + + // Watch for a new set of requests + if (fireGlobals && jQuery.active++ === 0) { + jQuery.event.trigger("ajaxStart"); + } + + // More options handling for requests with no content + if (!s.hasContent) { + + // If data is available, append data to url + if (s.data) { + s.url += (rquery.test(s.url) ? "&" : "?") + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if (s.cache === false) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace(rts, "$1_=" + ts); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : ""); + } + } + + // Set the correct header, if data is being sent + if (s.data && s.hasContent && s.contentType !== false || options.contentType) { + jqXHR.setRequestHeader("Content-Type", s.contentType); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if (s.ifModified) { + ifModifiedKey = ifModifiedKey || s.url; + if (jQuery.lastModified[ifModifiedKey]) { + jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[ifModifiedKey]); + } + if (jQuery.etag[ifModifiedKey]) { + jqXHR.setRequestHeader("If-None-Match", jQuery.etag[ifModifiedKey]); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? + s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : + s.accepts["*"] + ); + + // Check for headers option + for (i in s.headers) { + jqXHR.setRequestHeader(i, s.headers[i]); + } + + // Allow custom headers/mimetypes and early abort + if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2)) { + // Abort if not done already + jqXHR.abort(); + return false; + + } + + // Install callbacks on deferreds + for (i in { success: 1, error: 1, complete: 1 }) { + jqXHR[i](s[i]); + } + + // Get transport + transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); + + // If no transport, we auto-abort + if (!transport) { + done(-1, "No Transport"); + } else { + jqXHR.readyState = 1; + // Send global event + if (fireGlobals) { + globalEventContext.trigger("ajaxSend", [jqXHR, s]); + } + // Timeout + if (s.async && s.timeout > 0) { + timeoutTimer = setTimeout(function () { + jqXHR.abort("timeout"); + }, s.timeout); + } + + try { + state = 1; + transport.send(requestHeaders, done); + } catch (e) { + // Propagate exception as error if not done + if (state < 2) { + done(-1, e); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }; + jQuery.ajaxPrefilter = function (dataTypeExpression, func) { + /// + /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). + /// + /// + /// An optional string containing one or more space-separated dataTypes + /// + /// + /// A handler to set default values for future Ajax requests. + /// + /// + + + if (typeof dataTypeExpression !== "string") { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if (jQuery.isFunction(func)) { + var dataTypes = dataTypeExpression.toLowerCase().split(rspacesAjax), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for (; i < length; i++) { + dataType = dataTypes[i]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test(dataType); + if (placeBefore) { + dataType = dataType.substr(1) || "*"; + } + list = structure[dataType] = structure[dataType] || []; + // then we add to the structure accordingly + list[placeBefore ? "unshift" : "push"](func); + } + } + }; + jQuery.ajaxSettings = { + "url": 'http://localhost:25812/', + "isLocal": false, + "global": true, + "type": 'GET', + "contentType": 'application/x-www-form-urlencoded; charset=UTF-8', + "processData": true, + "async": true, + "accepts": {}, + "contents": {}, + "responseFields": {}, + "converters": {}, + "flatOptions": {}, + "jsonp": 'callback' + }; + jQuery.ajaxSetup = function (target, settings) { + /// + /// Set default values for future Ajax requests. + /// + /// + /// A set of key/value pairs that configure the default Ajax request. All options are optional. + /// + + if (settings) { + // Building a settings object + ajaxExtend(target, jQuery.ajaxSettings); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend(target, settings); + return target; + }; + jQuery.ajaxTransport = function (dataTypeExpression, func) { + + + if (typeof dataTypeExpression !== "string") { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if (jQuery.isFunction(func)) { + var dataTypes = dataTypeExpression.toLowerCase().split(rspacesAjax), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for (; i < length; i++) { + dataType = dataTypes[i]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test(dataType); + if (placeBefore) { + dataType = dataType.substr(1) || "*"; + } + list = structure[dataType] = structure[dataType] || []; + // then we add to the structure accordingly + list[placeBefore ? "unshift" : "push"](func); + } + } + }; + jQuery.attr = function (elem, name, value, pass) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + if (pass && name in jQuery.attrFn) { + return jQuery(elem)[name](value); + } + + // Fallback to prop when attributes are not supported + if (typeof elem.getAttribute === "undefined") { + return jQuery.prop(elem, name, value); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if (notxml) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[name] || (rboolean.test(name) ? boolHook : nodeHook); + } + + if (value !== undefined) { + + if (value === null) { + jQuery.removeAttr(elem, name); + return; + + } else if (hooks && "set" in hooks && notxml && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + elem.setAttribute(name, "" + value); + return value; + } + + } else if (hooks && "get" in hooks && notxml && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + + ret = elem.getAttribute(name); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }; + jQuery.attrFn = { + "val": true, + "css": true, + "html": true, + "text": true, + "data": true, + "width": true, + "height": true, + "offset": true, + "blur": true, + "focus": true, + "focusin": true, + "focusout": true, + "load": true, + "resize": true, + "scroll": true, + "unload": true, + "click": true, + "dblclick": true, + "mousedown": true, + "mouseup": true, + "mousemove": true, + "mouseover": true, + "mouseout": true, + "mouseenter": true, + "mouseleave": true, + "change": true, + "select": true, + "submit": true, + "keydown": true, + "keypress": true, + "keyup": true, + "error": true, + "contextmenu": true + }; + jQuery.attrHooks = { + "type": {}, + "value": {}, + "tabindex": {} + }; + jQuery.bindReady = function () { + + if (readyList) { + return; + } + + readyList = jQuery.Callbacks("once memory"); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if (document.readyState === "complete") { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout(jQuery.ready, 1); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if (document.addEventListener) { + // Use the handy event callback + document.addEventListener("DOMContentLoaded", DOMContentLoaded, false); + + // A fallback to window.onload, that will always work + window.addEventListener("load", jQuery.ready, false); + + // If IE event model is used + } else if (document.attachEvent) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent("onload", jQuery.ready); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch (e) { } + + if (document.documentElement.doScroll && toplevel) { + doScrollCheck(); + } + } + }; + jQuery.boxModel = true; + jQuery.browser = { + "msie": true, + "version": '10.0' + }; + jQuery.buildFragment = function (args, nodes, scripts) { + + var fragment, cacheable, cacheresults, doc, + first = args[0]; + + // nodes may contain either an explicit document object, + // a jQuery collection or context object. + // If nodes[0] contains a valid object to assign to doc + if (nodes && nodes[0]) { + doc = nodes[0].ownerDocument || nodes[0]; + } + + // Ensure that an attr object doesn't incorrectly stand in as a document object + // Chrome and Firefox seem to allow this to occur and will throw exception + // Fixes #8950 + if (!doc.createDocumentFragment) { + doc = document; + } + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if (args.length === 1 && typeof first === "string" && first.length < 512 && doc === document && + first.charAt(0) === "<" && !rnocache.test(first) && + (jQuery.support.checkClone || !rchecked.test(first)) && + (jQuery.support.html5Clone || !rnoshimcache.test(first))) { + + cacheable = true; + + cacheresults = jQuery.fragments[first]; + if (cacheresults && cacheresults !== 1) { + fragment = cacheresults; + } + } + + if (!fragment) { + fragment = doc.createDocumentFragment(); + jQuery.clean(args, doc, fragment, scripts); + } + + if (cacheable) { + jQuery.fragments[first] = cacheresults ? fragment : 1; + } + + return { fragment: fragment, cacheable: cacheable }; + }; + jQuery.cache = {}; + jQuery.camelCase = function (string) { + + return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); + }; + jQuery.clean = function (elems, context, fragment, scripts) { + + var checkScriptType, script, j, + ret = []; + + context = context || document; + + // !context.createElement fails in IE with an error but returns typeof 'object' + if (typeof context.createElement === "undefined") { + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + } + + for (var i = 0, elem; (elem = elems[i]) != null; i++) { + if (typeof elem === "number") { + elem += ""; + } + + if (!elem) { + continue; + } + + // Convert html string into DOM nodes + if (typeof elem === "string") { + if (!rhtml.test(elem)) { + elem = context.createTextNode(elem); + } else { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Trim whitespace, otherwise indexOf won't work as expected + var tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase(), + wrap = wrapMap[tag] || wrapMap._default, + depth = wrap[0], + div = context.createElement("div"), + safeChildNodes = safeFragment.childNodes, + remove; + + // Append wrapper element to unknown element safe doc fragment + if (context === document) { + // Use the fragment we've already created for this document + safeFragment.appendChild(div); + } else { + // Use a fragment created with the owner document + createSafeFragment(context).appendChild(div); + } + + // Go to html and back, then peel off extra wrappers + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while (depth--) { + div = div.lastChild; + } + + // Remove IE's autoinserted from table fragments + if (!jQuery.support.tbody) { + + // String was a , *may* have spurious + var hasBody = rtbody.test(elem), + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
" && !hasBody ? + div.childNodes : + []; + + for (j = tbody.length - 1; j >= 0 ; --j) { + if (jQuery.nodeName(tbody[j], "tbody") && !tbody[j].childNodes.length) { + tbody[j].parentNode.removeChild(tbody[j]); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if (!jQuery.support.leadingWhitespace && rleadingWhitespace.test(elem)) { + div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]), div.firstChild); + } + + elem = div.childNodes; + + // Clear elements from DocumentFragment (safeFragment or otherwise) + // to avoid hoarding elements. Fixes #11356 + if (div) { + div.parentNode.removeChild(div); + + // Guard against -1 index exceptions in FF3.6 + if (safeChildNodes.length > 0) { + remove = safeChildNodes[safeChildNodes.length - 1]; + + if (remove && remove.parentNode) { + remove.parentNode.removeChild(remove); + } + } + } + } + } + + // Resets defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + var len; + if (!jQuery.support.appendChecked) { + if (elem[0] && typeof (len = elem.length) === "number") { + for (j = 0; j < len; j++) { + findInputs(elem[j]); + } + } else { + findInputs(elem); + } + } + + if (elem.nodeType) { + ret.push(elem); + } else { + ret = jQuery.merge(ret, elem); + } + } + + if (fragment) { + checkScriptType = function (elem) { + return !elem.type || rscriptType.test(elem.type); + }; + for (i = 0; ret[i]; i++) { + script = ret[i]; + if (scripts && jQuery.nodeName(script, "script") && (!script.type || rscriptType.test(script.type))) { + scripts.push(script.parentNode ? script.parentNode.removeChild(script) : script); + + } else { + if (script.nodeType === 1) { + var jsTags = jQuery.grep(script.getElementsByTagName("script"), checkScriptType); + + ret.splice.apply(ret, [i + 1, 0].concat(jsTags)); + } + fragment.appendChild(script); + } + } + } + + return ret; + }; + jQuery.cleanData = function (elems) { + + var data, id, + cache = jQuery.cache, + special = jQuery.event.special, + deleteExpando = jQuery.support.deleteExpando; + + for (var i = 0, elem; (elem = elems[i]) != null; i++) { + if (elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) { + continue; + } + + id = elem[jQuery.expando]; + + if (id) { + data = cache[id]; + + if (data && data.events) { + for (var type in data.events) { + if (special[type]) { + jQuery.event.remove(elem, type); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent(elem, type, data.handle); + } + } + + // Null the DOM reference to avoid IE6/7/8 leak (#7054) + if (data.handle) { + data.handle.elem = null; + } + } + + if (deleteExpando) { + delete elem[jQuery.expando]; + + } else if (elem.removeAttribute) { + elem.removeAttribute(jQuery.expando); + } + + delete cache[id]; + } + } + }; + jQuery.clone = function (elem, dataAndEvents, deepDataAndEvents) { + + var srcElements, + destElements, + i, + // IE<=8 does not properly clone detached, unknown element nodes + clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">") ? + elem.cloneNode(true) : + shimCloneNode(elem); + + if ((!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes(elem, clone); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll(elem); + destElements = getAll(clone); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for (i = 0; srcElements[i]; ++i) { + // Ensure that the destination node is not null; Fixes #9587 + if (destElements[i]) { + cloneFixAttributes(srcElements[i], destElements[i]); + } + } + } + + // Copy the events from the original to the clone + if (dataAndEvents) { + cloneCopyEvent(elem, clone); + + if (deepDataAndEvents) { + srcElements = getAll(elem); + destElements = getAll(clone); + + for (i = 0; srcElements[i]; ++i) { + cloneCopyEvent(srcElements[i], destElements[i]); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }; + jQuery.contains = function (a, b) { + /// + /// Check to see if a DOM element is within another DOM element. + /// + /// + /// The DOM element that may contain the other element. + /// + /// + /// The DOM element that may be contained by the other element. + /// + /// + + return a !== b && (a.contains ? a.contains(b) : true); + }; + jQuery.css = function (elem, name, extra) { + + var ret, hooks; + + // Make sure that we're working with the right name + name = jQuery.camelCase(name); + hooks = jQuery.cssHooks[name]; + name = jQuery.cssProps[name] || name; + + // cssFloat needs a special treatment + if (name === "cssFloat") { + name = "float"; + } + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, true, extra)) !== undefined) { + return ret; + + // Otherwise, if a way to get the computed value exists, use that + } else if (curCSS) { + return curCSS(elem, name); + } + }; + jQuery.cssHooks = { + "opacity": {}, + "height": {}, + "width": {}, + "margin": {}, + "padding": {}, + "borderWidth": {} + }; + jQuery.cssNumber = { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }; + jQuery.cssProps = { "float": 'cssFloat' }; + jQuery.curCSS = function (elem, name, extra) { + + var ret, hooks; + + // Make sure that we're working with the right name + name = jQuery.camelCase(name); + hooks = jQuery.cssHooks[name]; + name = jQuery.cssProps[name] || name; + + // cssFloat needs a special treatment + if (name === "cssFloat") { + name = "float"; + } + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, true, extra)) !== undefined) { + return ret; + + // Otherwise, if a way to get the computed value exists, use that + } else if (curCSS) { + return curCSS(elem, name); + } + }; + jQuery.data = function (elem, name, data, pvt /* Internal Use Only */) { + /// + /// 1: Store arbitrary data associated with the specified element. Returns the value that was set. + /// 1.1 - jQuery.data(element, key, value) + /// 2: Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// 2.1 - jQuery.data(element, key) + /// 2.2 - jQuery.data(element) + /// + /// + /// The DOM element to associate with the data. + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value. + /// + /// + + if (!jQuery.acceptData(elem)) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[internalKey] : elem[internalKey] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ((!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined) { + return; + } + + if (!id) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if (isNode) { + elem[internalKey] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if (!cache[id]) { + cache[id] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if (!isNode) { + cache[id].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if (typeof name === "object" || typeof name === "function") { + if (pvt) { + cache[id] = jQuery.extend(cache[id], name); + } else { + cache[id].data = jQuery.extend(cache[id].data, name); + } + } + + privateCache = thisCache = cache[id]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if (!pvt) { + if (!thisCache.data) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if (data !== undefined) { + thisCache[jQuery.camelCase(name)] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if (isEvents && !thisCache[name]) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if (getByName) { + + // First Try to find as-is property data + ret = thisCache[name]; + + // Test for null|undefined property data + if (ret == null) { + + // Try to find the camelCased property + ret = thisCache[jQuery.camelCase(name)]; + } + } else { + ret = thisCache; + } + + return ret; + }; + jQuery.dequeue = function (elem, type) { + /// + /// Execute the next function on the queue for the matched element. + /// + /// + /// A DOM element from which to remove and execute a queued function. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + type = type || "fx"; + + var queue = jQuery.queue(elem, type), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if (fn === "inprogress") { + fn = queue.shift(); + } + + if (fn) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if (type === "fx") { + queue.unshift("inprogress"); + } + + jQuery._data(elem, type + ".run", hooks); + fn.call(elem, function () { + jQuery.dequeue(elem, type); + }, hooks); + } + + if (!queue.length) { + jQuery.removeData(elem, type + "queue " + type + ".run", true); + handleQueueMarkDefer(elem, type, "queue"); + } + }; + jQuery.dir = function (elem, dir, until) { + + var matched = [], + cur = elem[dir]; + + while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[dir]; + } + return matched; + }; + jQuery.each = function (object, callback, args) { + /// + /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. + /// + /// + /// The object or array to iterate over. + /// + /// + /// The function that will be executed on every object. + /// + /// + + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if (args) { + if (isObj) { + for (name in object) { + if (callback.apply(object[name], args) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.apply(object[i++], args) === false) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if (isObj) { + for (name in object) { + if (callback.call(object[name], name, object[name]) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.call(object[i], i, object[i++]) === false) { + break; + } + } + } + } + + return object; + }; + jQuery.easing = {}; + jQuery.error = function (msg) { + /// + /// Takes a string and throws an exception containing it. + /// + /// + /// The message to send out. + /// + + throw new Error(msg); + }; + jQuery.etag = {}; + jQuery.event = { + "global": {}, + "customEvent": {}, + "props": ['attrChange', 'attrName', 'relatedNode', 'srcElement', 'altKey', 'bubbles', 'cancelable', 'ctrlKey', 'currentTarget', 'eventPhase', 'metaKey', 'relatedTarget', 'shiftKey', 'target', 'timeStamp', 'view', 'which'], + "fixHooks": {}, + "keyHooks": {}, + "mouseHooks": {}, + "special": {}, + "triggered": {} + }; + jQuery.expr = { + "order": ['ID', 'CLASS', 'NAME', 'TAG'], + "match": {}, + "leftMatch": {}, + "attrMap": {}, + "attrHandle": {}, + "relative": {}, + "find": {}, + "preFilter": {}, + "filters": {}, + "setFilters": {}, + "filter": {}, + ":": {} + }; + jQuery.extend = function () { + /// + /// Merge the contents of two or more objects together into the first object. + /// 1 - jQuery.extend(target, object1, objectN) + /// 2 - jQuery.extend(deep, target, object1, objectN) + /// + /// + /// If true, the merge becomes recursive (aka. deep copy). + /// + /// + /// The object to extend. It will receive the new properties. + /// + /// + /// An object containing additional properties to merge in. + /// + /// + /// Additional objects containing properties to merge in. + /// + /// + + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.filter = function (expr, elems, not) { + + if (not) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [] : + jQuery.find.matches(expr, elems); + }; + jQuery.find = function (query, context, extra, seed) { + + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if (!seed && !Sizzle.isXML(context)) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(query); + + if (match && (context.nodeType === 1 || context.nodeType === 9)) { + // Speed-up: Sizzle("TAG") + if (match[1]) { + return makeArray(context.getElementsByTagName(query), extra); + + // Speed-up: Sizzle(".CLASS") + } else if (match[2] && Expr.find.CLASS && context.getElementsByClassName) { + return makeArray(context.getElementsByClassName(match[2]), extra); + } + } + + if (context.nodeType === 9) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if (query === "body" && context.body) { + return makeArray([context.body], extra); + + // Speed-up: Sizzle("#ID") + } else if (match && match[3]) { + var elem = context.getElementById(match[3]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id === match[3]) { + return makeArray([elem], extra); + } + + } else { + return makeArray([], extra); + } + } + + try { + return makeArray(context.querySelectorAll(query), extra); + } catch (qsaError) { } + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if (context.nodeType === 1 && context.nodeName.toLowerCase() !== "object") { + var oldContext = context, + old = context.getAttribute("id"), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test(query); + + if (!old) { + context.setAttribute("id", nid); + } else { + nid = nid.replace(/'/g, "\\$&"); + } + if (relativeHierarchySelector && hasParent) { + context = context.parentNode; + } + + try { + if (!relativeHierarchySelector || hasParent) { + return makeArray(context.querySelectorAll("[id='" + nid + "'] " + query), extra); + } + + } catch (pseudoError) { + } finally { + if (!old) { + oldContext.removeAttribute("id"); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + jQuery.fn = { + "selector": '', + "jquery": '1.7.2', + "length": 0 + }; + jQuery.fragments = {}; + jQuery.fx = function (elem, options, prop) { + + this.options = options; + this.elem = elem; + this.prop = prop; + + options.orig = options.orig || {}; + }; + jQuery.get = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP GET request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; + jQuery.getJSON = function (url, data, callback) { + /// + /// Load JSON-encoded data from the server using a GET HTTP request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, data, callback, "json"); + }; + jQuery.getScript = function (url, callback) { + /// + /// Load a JavaScript file from the server using a GET HTTP request, then execute it. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, undefined, callback, "script"); + }; + jQuery.globalEval = function (data) { + /// + /// Execute some JavaScript code globally. + /// + /// + /// The JavaScript code to execute. + /// + + if (data && rnotwhite.test(data)) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + (window.execScript || function (data) { + window["eval"].call(window, data); + })(data); + } + }; + jQuery.grep = function (elems, callback, inv) { + /// + /// Finds the elements of an array which satisfy a filter function. The original array is not affected. + /// + /// + /// The array to search through. + /// + /// + /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. + /// + /// + /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. + /// + /// + + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for (var i = 0, length = elems.length; i < length; i++) { + retVal = !!callback(elems[i], i); + if (inv !== retVal) { + ret.push(elems[i]); + } + } + + return ret; + }; + jQuery.guid = 1; + jQuery.hasData = function (elem) { + /// + /// Determine whether an element has any jQuery data associated with it. + /// + /// + /// A DOM element to be checked for data. + /// + /// + + elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando]; + return !!elem && !isEmptyDataObject(elem); + }; + jQuery.holdReady = function (hold) { + /// + /// Holds or releases the execution of jQuery's ready event. + /// + /// + /// Indicates whether the ready hold is being requested or released + /// + /// + + if (hold) { + jQuery.readyWait++; + } else { + jQuery.ready(true); + } + }; + jQuery.inArray = function (elem, array, i) { + /// + /// Search for a specified value within an array and return its index (or -1 if not found). + /// + /// + /// The value to search for. + /// + /// + /// An array through which to search. + /// + /// + /// The index of the array at which to begin the search. The default is 0, which will search the whole array. + /// + /// + + var len; + + if (array) { + if (indexOf) { + return indexOf.call(array, elem, i); + } + + len = array.length; + i = i ? i < 0 ? Math.max(0, len + i) : i : 0; + + for (; i < len; i++) { + // Skip accessing in sparse arrays + if (i in array && array[i] === elem) { + return i; + } + } + } + + return -1; + }; + jQuery.isArray = Array.isArray || function (obj) { + /// + /// Determine whether the argument is an array. + /// + /// + return jQuery.type(obj) === "array"; + }; + jQuery.isEmptyObject = function (obj) { + /// + /// Check to see if an object is empty (contains no properties). + /// + /// + /// The object that will be checked to see if it's empty. + /// + /// + + for (var name in obj) { + return false; + } + return true; + }; + jQuery.isFunction = function (obj) { + /// + /// Determine if the argument passed is a Javascript function object. + /// + /// + /// Object to test whether or not it is a function. + /// + /// + + return jQuery.type(obj) === "function"; + }; + jQuery.isNumeric = function (obj) { + /// + /// Determines whether its argument is a number. + /// + /// + /// The value to be tested. + /// + /// + + return !isNaN(parseFloat(obj)) && isFinite(obj); + }; + jQuery.isPlainObject = function (obj) { + /// + /// Check to see if an object is a plain object (created using "{}" or "new Object"). + /// + /// + /// The object that will be checked to see if it's a plain object. + /// + /// + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { + return false; + } + + try { + // Not own constructor property must be Object + if (obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + } catch (e) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for (key in obj) { } + + return key === undefined || hasOwn.call(obj, key); + }; + jQuery.isReady = true; + jQuery.isWindow = function (obj) { + /// + /// Determine whether the argument is a window. + /// + /// + /// Object to test whether or not it is a window. + /// + /// + + return obj != null && obj == obj.window; + }; + jQuery.isXMLDoc = function (elem) { + /// + /// Check to see if a DOM node is within an XML document (or is an XML document). + /// + /// + /// The DOM node that will be checked to see if it's in an XML document. + /// + /// + + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + jQuery.lastModified = {}; + jQuery.makeArray = function (array, results) { + /// + /// Convert an array-like object into a true JavaScript array. + /// + /// + /// Any object to turn into a native Array. + /// + /// + + var ret = results || []; + + if (array != null) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type(array); + + if (array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow(array)) { + push.call(ret, array); + } else { + jQuery.merge(ret, array); + } + } + + return ret; + }; + jQuery.map = function (elems, callback, arg) { + /// + /// Translate all items in an array or object to new array of items. + /// 1 - jQuery.map(array, callback(elementOfArray, indexInArray)) + /// 2 - jQuery.map(arrayOrObject, callback( value, indexOrKey )) + /// + /// + /// The Array to translate. + /// + /// + /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. + /// + /// + + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ((length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems)); + + // Go through the array, translating each of the items to their + if (isArray) { + for (; i < length; i++) { + value = callback(elems[i], i, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + + // Go through every key on the object, + } else { + for (key in elems) { + value = callback(elems[key], key, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply([], ret); + }; + jQuery.merge = function (first, second) { + /// + /// Merge the contents of two arrays together into the first array. + /// + /// + /// The first array to merge, the elements of second added. + /// + /// + /// The second array to merge into the first, unaltered. + /// + /// + + var i = first.length, + j = 0; + + if (typeof second.length === "number") { + for (var l = second.length; j < l; j++) { + first[i++] = second[j]; + } + + } else { + while (second[j] !== undefined) { + first[i++] = second[j++]; + } + } + + first.length = i; + + return first; + }; + jQuery.noConflict = function (deep) { + /// + /// Relinquish jQuery's control of the $ variable. + /// + /// + /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). + /// + /// + + if (window.$ === jQuery) { + window.$ = _$; + } + + if (deep && window.jQuery === jQuery) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + jQuery.noData = { + "embed": true, + "object": 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000', + "applet": true + }; + jQuery.nodeName = function (elem, name) { + + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }; + jQuery.noop = function () { + /// + /// An empty function. + /// + /// + }; + jQuery.now = function () { + /// + /// Return a number representing the current time. + /// + /// + + return (new Date()).getTime(); + }; + jQuery.nth = function (cur, result, dir, elem) { + + result = result || 1; + var num = 0; + + for (; cur; cur = cur[dir]) { + if (cur.nodeType === 1 && ++num === result) { + break; + } + } + + return cur; + }; + jQuery.offset = {}; + jQuery.param = function (a, traditional) { + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// 1 - jQuery.param(obj) + /// 2 - jQuery.param(obj, traditional) + /// + /// + /// An array or object to serialize. + /// + /// + /// A Boolean indicating whether to perform a traditional "shallow" serialization. + /// + /// + + var s = [], + add = function (key, value) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction(value) ? value() : value; + s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if (traditional === undefined) { + traditional = jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if (jQuery.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) { + // Serialize the form elements + jQuery.each(a, function () { + add(this.name, this.value); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for (var prefix in a) { + buildParams(prefix, a[prefix], traditional, add); + } + } + + // Return the resulting serialization + return s.join("&").replace(r20, "+"); + }; + jQuery.parseJSON = function (data) { + /// + /// Takes a well-formed JSON string and returns the resulting JavaScript object. + /// + /// + /// The JSON string to parse. + /// + /// + + if (typeof data !== "string" || !data) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim(data); + + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if (rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, ""))) { + + return (new Function("return " + data))(); + + } + jQuery.error("Invalid JSON: " + data); + }; + jQuery.parseXML = function (data) { + /// + /// Parses a string into an XML document. + /// + /// + /// a well-formed XML string to be parsed + /// + /// + + if (typeof data !== "string" || !data) { + return null; + } + var xml, tmp; + try { + if (window.DOMParser) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString(data, "text/xml"); + } else { // IE + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = "false"; + xml.loadXML(data); + } + } catch (e) { + xml = undefined; + } + if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + jQuery.error("Invalid XML: " + data); + } + return xml; + }; + jQuery.post = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP POST request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; + jQuery.prop = function (elem, name, value) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + if (notxml) { + // Fix name and attach hooks + name = jQuery.propFix[name] || name; + hooks = jQuery.propHooks[name]; + } + + if (value !== undefined) { + if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + return (elem[name] = value); + } + + } else { + if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + return elem[name]; + } + } + }; + jQuery.propFix = { + "tabindex": 'tabIndex', + "readonly": 'readOnly', + "for": 'htmlFor', + "class": 'className', + "maxlength": 'maxLength', + "cellspacing": 'cellSpacing', + "cellpadding": 'cellPadding', + "rowspan": 'rowSpan', + "colspan": 'colSpan', + "usemap": 'useMap', + "frameborder": 'frameBorder', + "contenteditable": 'contentEditable' + }; + jQuery.propHooks = { + "tabIndex": {}, + "selected": {} + }; + jQuery.proxy = function (fn, context) { + /// + /// Takes a function and returns a new one that will always have a particular context. + /// 1 - jQuery.proxy(function, context) + /// 2 - jQuery.proxy(context, name) + /// + /// + /// The function whose context will be changed. + /// + /// + /// The object to which the context (this) of the function should be set. + /// + /// + + if (typeof context === "string") { + var tmp = fn[context]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if (!jQuery.isFunction(fn)) { + return undefined; + } + + // Simulated bind + var args = slice.call(arguments, 2), + proxy = function () { + return fn.apply(context, args.concat(slice.call(arguments))); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }; + jQuery.queue = function (elem, type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched element. + /// 1.1 - jQuery.queue(element, queueName) + /// 2: Manipulate the queue of functions to be executed on the matched element. + /// 2.1 - jQuery.queue(element, queueName, newQueue) + /// 2.2 - jQuery.queue(element, queueName, callback()) + /// + /// + /// A DOM element where the array of queued functions is attached. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var q; + if (elem) { + type = (type || "fx") + "queue"; + q = jQuery._data(elem, type); + + // Speed up dequeue by getting out quickly if this is just a lookup + if (data) { + if (!q || jQuery.isArray(data)) { + q = jQuery._data(elem, type, jQuery.makeArray(data)); + } else { + q.push(data); + } + } + return q || []; + } + }; + jQuery.ready = function (wait) { + + // Either a released hold or an DOMready/load event and not yet ready + if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if (!document.body) { + return setTimeout(jQuery.ready, 1); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if (wait !== true && --jQuery.readyWait > 0) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith(document, [jQuery]); + + // Trigger any bound ready events + if (jQuery.fn.trigger) { + jQuery(document).trigger("ready").off("ready"); + } + } + }; + jQuery.readyWait = 0; + jQuery.removeAttr = function (elem, value) { + + var propName, attrNames, name, l, isBool, + i = 0; + + if (value && elem.nodeType === 1) { + attrNames = value.toLowerCase().split(rspace); + l = attrNames.length; + + for (; i < l; i++) { + name = attrNames[i]; + + if (name) { + propName = jQuery.propFix[name] || name; + isBool = rboolean.test(name); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if (!isBool) { + jQuery.attr(elem, name, ""); + } + elem.removeAttribute(getSetAttribute ? name : propName); + + // Set corresponding property to false for boolean attributes + if (isBool && propName in elem) { + elem[propName] = false; + } + } + } + } + }; + jQuery.removeData = function (elem, name, pvt /* Internal Use Only */) { + /// + /// Remove a previously-stored piece of data. + /// + /// + /// A DOM element from which to remove data. + /// + /// + /// A string naming the piece of data to remove. + /// + /// + + if (!jQuery.acceptData(elem)) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[internalKey] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if (!cache[id]) { + return; + } + + if (name) { + + thisCache = pvt ? cache[id] : cache[id].data; + + if (thisCache) { + + // Support array or space separated string names for data keys + if (!jQuery.isArray(name)) { + + // try the string as a key before any manipulation + if (name in thisCache) { + name = [name]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase(name); + if (name in thisCache) { + name = [name]; + } else { + name = name.split(" "); + } + } + } + + for (i = 0, l = name.length; i < l; i++) { + delete thisCache[name[i]]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if (!(pvt ? isEmptyDataObject : jQuery.isEmptyObject)(thisCache)) { + return; + } + } + } + + // See jQuery.data for more information + if (!pvt) { + delete cache[id].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if (!isEmptyDataObject(cache[id])) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if (jQuery.support.deleteExpando || !cache.setInterval) { + delete cache[id]; + } else { + cache[id] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if (isNode) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if (jQuery.support.deleteExpando) { + delete elem[internalKey]; + } else if (elem.removeAttribute) { + elem.removeAttribute(internalKey); + } else { + elem[internalKey] = null; + } + } + }; + jQuery.removeEvent = function (elem, type, handle) { + + if (elem.removeEventListener) { + elem.removeEventListener(type, handle, false); + } + }; + jQuery.sibling = function (n, elem) { + + var r = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== elem) { + r.push(n); + } + } + + return r; + }; + jQuery.speed = function (speed, easing, fn) { + + var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { + complete: fn || !fn && easing || + jQuery.isFunction(speed) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction(easing) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if (opt.queue == null || opt.queue === true) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function (noUnmark) { + if (jQuery.isFunction(opt.old)) { + opt.old.call(this); + } + + if (opt.queue) { + jQuery.dequeue(this, opt.queue); + } else if (noUnmark !== false) { + jQuery._unmark(this); + } + }; + + return opt; + }; + jQuery.style = function (elem, name, value, extra) { + + // Don't set styles on text and comment nodes + if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { + return; + } + + // Make sure that we're working with the right name + var ret, type, origName = jQuery.camelCase(name), + style = elem.style, hooks = jQuery.cssHooks[origName]; + + name = jQuery.cssProps[origName] || origName; + + // Check if we're setting a value + if (value !== undefined) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if (type === "string" && (ret = rrelNum.exec(value))) { + value = (+(ret[1] + 1) * +ret[2]) + parseFloat(jQuery.css(elem, name)); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if (value == null || type === "number" && isNaN(value)) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if (type === "number" && !jQuery.cssNumber[origName]) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value)) !== undefined) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[name] = value; + } catch (e) { } + } + + } else { + // If a hook was provided get the non-computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { + return ret; + } + + // Otherwise just get the value from the style object + return style[name]; + } + }; + jQuery.sub = function () { + /// + /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. + /// + /// + + function jQuerySub(selector, context) { + return new jQuerySub.fn.init(selector, context); + } + jQuery.extend(true, jQuerySub, this); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init(selector, context) { + if (context && context instanceof jQuery && !(context instanceof jQuerySub)) { + context = jQuerySub(context); + } + + return jQuery.fn.init.call(this, selector, context, rootjQuerySub); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }; + jQuery.support = { + "leadingWhitespace": true, + "tbody": true, + "htmlSerialize": true, + "style": true, + "hrefNormalized": true, + "opacity": true, + "cssFloat": true, + "checkOn": true, + "optSelected": false, + "getSetAttribute": true, + "enctype": true, + "html5Clone": true, + "submitBubbles": true, + "changeBubbles": true, + "focusinBubbles": true, + "deleteExpando": true, + "noCloneEvent": true, + "inlineBlockNeedsLayout": false, + "shrinkWrapBlocks": false, + "reliableMarginRight": true, + "pixelMargin": true, + "boxModel": true, + "noCloneChecked": false, + "optDisabled": true, + "radioValue": false, + "checkClone": true, + "appendChecked": true, + "ajax": true, + "cors": true, + "reliableHiddenOffsets": true, + "doesNotAddBorder": true, + "doesAddBorderForTableAndCells": true, + "fixedPosition": true, + "subtractsBorderForOverflowNotVisible": false, + "doesNotIncludeMarginInBodyOffset": true + }; + jQuery.swap = function (elem, options, callback) { + + var old = {}, + ret, name; + + // Remember the old values, and insert the new ones + for (name in options) { + old[name] = elem.style[name]; + elem.style[name] = options[name]; + } + + ret = callback.call(elem); + + // Revert the old values + for (name in options) { + elem.style[name] = old[name]; + } + + return ret; + }; + jQuery.text = function (elem) { + + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if (nodeType) { + if (nodeType === 1 || nodeType === 9 || nodeType === 11) { + // Use textContent || innerText for elements + if (typeof elem.textContent === 'string') { + return elem.textContent; + } else if (typeof elem.innerText === 'string') { + // Replace IE's carriage returns + return elem.innerText.replace(rReturn, ''); + } else { + // Traverse it's children + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for (i = 0; (node = elem[i]) ; i++) { + // Do not traverse comment nodes + if (node.nodeType !== 8) { + ret += getText(node); + } + } + } + return ret; + }; + jQuery.trim = function (text) { + /// + /// Remove the whitespace from the beginning and end of a string. + /// + /// + /// The string to trim. + /// + /// + + return text == null ? + "" : + trim.call(text); + }; + jQuery.type = function (obj) { + /// + /// Determine the internal JavaScript [[Class]] of an object. + /// + /// + /// Object to get the internal JavaScript [[Class]] of. + /// + /// + + return obj == null ? + String(obj) : + class2type[toString.call(obj)] || "object"; + }; + jQuery.uaMatch = function (ua) { + + ua = ua.toLowerCase(); + + var match = rwebkit.exec(ua) || + ropera.exec(ua) || + rmsie.exec(ua) || + ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }; + jQuery.unique = function (results) { + /// + /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. + /// + /// + /// The Array of DOM elements. + /// + /// + + if (sortOrder) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if (hasDuplicate) { + for (var i = 1; i < results.length; i++) { + if (results[i] === results[i - 1]) { + results.splice(i--, 1); + } + } + } + } + + return results; + }; + jQuery.uuid = 0; + jQuery.valHooks = { + "option": {}, + "select": {}, + "radio": {}, + "checkbox": {} + }; + jQuery.when = function (firstParam) { + /// + /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + /// + /// + /// One or more Deferred objects, or plain JavaScript objects. + /// + /// + + var args = sliceDeferred.call(arguments, 0), + i = 0, + length = args.length, + pValues = new Array(length), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction(firstParam.promise) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc(i) { + return function (value) { + args[i] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value; + if (!(--count)) { + deferred.resolveWith(deferred, args); + } + }; + } + function progressFunc(i) { + return function (value) { + pValues[i] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value; + deferred.notifyWith(promise, pValues); + }; + } + if (length > 1) { + for (; i < length; i++) { + if (args[i] && args[i].promise && jQuery.isFunction(args[i].promise)) { + args[i].promise().then(resolveFunc(i), deferred.reject, progressFunc(i)); + } else { + --count; + } + } + if (!count) { + deferred.resolveWith(deferred, args); + } + } else if (deferred !== firstParam) { + deferred.resolveWith(deferred, length ? [firstParam] : []); + } + return promise; + }; + jQuery.Event.prototype.isDefaultPrevented = function returnFalse() { + /// + /// Returns whether event.preventDefault() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isImmediatePropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopImmediatePropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isPropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopPropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.preventDefault = function () { + /// + /// If this method is called, the default action of the event will not be triggered. + /// + /// + + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + + // if preventDefault exists run it on the original event + if (e.preventDefault) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }; + jQuery.Event.prototype.stopImmediatePropagation = function () { + /// + /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. + /// + + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }; + jQuery.Event.prototype.stopPropagation = function () { + /// + /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. + /// + + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + // if stopPropagation exists run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }; + jQuery.prototype._toggle = function (fn) { + + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function (event) { + // Figure out which function to execute + var lastToggle = (jQuery._data(this, "lastToggle" + fn.guid) || 0) % i; + jQuery._data(this, "lastToggle" + fn.guid, lastToggle + 1); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[lastToggle].apply(this, arguments) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while (i < args.length) { + args[i++].guid = guid; + } + + return this.click(toggler); + }; + jQuery.prototype.add = function (selector, context) { + /// + /// Add elements to the set of matched elements. + /// 1 - add(selector) + /// 2 - add(elements) + /// 3 - add(html) + /// 4 - add(jQuery object) + /// 5 - add(selector, context) + /// + /// + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// + /// + /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. + /// + /// + + var set = typeof selector === "string" ? + jQuery(selector, context) : + jQuery.makeArray(selector && selector.nodeType ? [selector] : selector), + all = jQuery.merge(this.get(), set); + + return this.pushStack(isDisconnected(set[0]) || isDisconnected(all[0]) ? + all : + jQuery.unique(all)); + }; + jQuery.prototype.addClass = function (value) { + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// 1 - addClass(className) + /// 2 - addClass(function(index, currentClass)) + /// + /// + /// One or more class names to be added to the class attribute of each matched element. + /// + /// + + var classNames, i, l, elem, + setClass, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).addClass(value.call(this, j, this.className)); + }); + } + + if (value && typeof value === "string") { + classNames = value.split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1) { + if (!elem.className && classNames.length === 1) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for (c = 0, cl = classNames.length; c < cl; c++) { + if (!~setClass.indexOf(" " + classNames[c] + " ")) { + setClass += classNames[c] + " "; + } + } + elem.className = jQuery.trim(setClass); + } + } + } + } + + return this; + }; + jQuery.prototype.after = function () { + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// 1 - after(content, content) + /// 2 - after(function(index)) + /// + /// + /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. + /// + /// + + if (this[0] && this[0].parentNode) { + return this.domManip(arguments, false, function (elem) { + this.parentNode.insertBefore(elem, this.nextSibling); + }); + } else if (arguments.length) { + var set = this.pushStack(this, "after", arguments); + set.push.apply(set, jQuery.clean(arguments)); + return set; + } + }; + jQuery.prototype.ajaxComplete = function (f) { + /// + /// Register a handler to be called when Ajax requests complete. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxError = function (f) { + /// + /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxSend = function (f) { + /// + /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxStart = function (f) { + /// + /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxStop = function (f) { + /// + /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxSuccess = function (f) { + /// + /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.andSelf = function () { + /// + /// Add the previous set of elements on the stack to the current set. + /// + /// + + return this.add(this.prevObject); + }; + jQuery.prototype.animate = function (prop, speed, easing, callback) { + /// + /// Perform a custom animation of a set of CSS properties. + /// 1 - animate(properties, duration, easing, complete) + /// 2 - animate(properties, options) + /// + /// + /// A map of CSS properties that the animation will move toward. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var optall = jQuery.speed(speed, easing, callback); + + if (jQuery.isEmptyObject(prop)) { + return this.each(optall.complete, [false]); + } + + // Do not change referenced properties as per-property easing will be lost + prop = jQuery.extend({}, prop); + + function doAnimation() { + // XXX 'this' does not always have a nodeName when running the + // test suite + + if (optall.queue === false) { + jQuery._mark(this); + } + + var opt = jQuery.extend({}, optall), + isElement = this.nodeType === 1, + hidden = isElement && jQuery(this).is(":hidden"), + name, val, p, e, hooks, replace, + parts, start, end, unit, + method; + + // will store per property easing and be used to determine when an animation is complete + opt.animatedProperties = {}; + + // first pass over propertys to expand / normalize + for (p in prop) { + name = jQuery.camelCase(p); + if (p !== name) { + prop[name] = prop[p]; + delete prop[p]; + } + + if ((hooks = jQuery.cssHooks[name]) && "expand" in hooks) { + replace = hooks.expand(prop[name]); + delete prop[name]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'p' from above because we have the correct "name" + for (p in replace) { + if (!(p in prop)) { + prop[p] = replace[p]; + } + } + } + } + + for (name in prop) { + val = prop[name]; + // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) + if (jQuery.isArray(val)) { + opt.animatedProperties[name] = val[1]; + val = prop[name] = val[0]; + } else { + opt.animatedProperties[name] = opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing'; + } + + if (val === "hide" && hidden || val === "show" && !hidden) { + return opt.complete.call(this); + } + + if (isElement && (name === "height" || name === "width")) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opt.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if (jQuery.css(this, "display") === "inline" && + jQuery.css(this, "float") === "none") { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if (!jQuery.support.inlineBlockNeedsLayout || defaultDisplay(this.nodeName) === "inline") { + this.style.display = "inline-block"; + + } else { + this.style.zoom = 1; + } + } + } + } + + if (opt.overflow != null) { + this.style.overflow = "hidden"; + } + + for (p in prop) { + e = new jQuery.fx(this, opt, p); + val = prop[p]; + + if (rfxtypes.test(val)) { + + // Tracks whether to show or hide based on private + // data attached to the element + method = jQuery._data(this, "toggle" + p) || (val === "toggle" ? hidden ? "show" : "hide" : 0); + if (method) { + jQuery._data(this, "toggle" + p, method === "show" ? "hide" : "show"); + e[method](); + } else { + e[val](); + } + + } else { + parts = rfxnum.exec(val); + start = e.cur(); + + if (parts) { + end = parseFloat(parts[2]); + unit = parts[3] || (jQuery.cssNumber[p] ? "" : "px"); + + // We need to compute starting value + if (unit !== "px") { + jQuery.style(this, p, (end || 1) + unit); + start = ((end || 1) / e.cur()) * start; + jQuery.style(this, p, start + unit); + } + + // If a +=/-= token was provided, we're doing a relative animation + if (parts[1]) { + end = ((parts[1] === "-=" ? -1 : 1) * end) + start; + } + + e.custom(start, end, unit); + + } else { + e.custom(start, val, ""); + } + } + } + + // For JS strict compliance + return true; + } + + return optall.queue === false ? + this.each(doAnimation) : + this.queue(optall.queue, doAnimation); + }; + jQuery.prototype.append = function () { + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// 1 - append(content, content) + /// 2 - append(function(index, html)) + /// + /// + /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1) { + this.appendChild(elem); + } + }); + }; + jQuery.prototype.appendTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the end of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.attr = function (name, value) { + /// + /// 1: Get the value of an attribute for the first element in the set of matched elements. + /// 1.1 - attr(attributeName) + /// 2: Set one or more attributes for the set of matched elements. + /// 2.1 - attr(attributeName, value) + /// 2.2 - attr(map) + /// 2.3 - attr(attributeName, function(index, attr)) + /// + /// + /// The name of the attribute to set. + /// + /// + /// A value to set for the attribute. + /// + /// + + return jQuery.access(this, jQuery.attr, name, value, arguments.length > 1); + }; + jQuery.prototype.before = function () { + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// 1 - before(content, content) + /// 2 - before(function) + /// + /// + /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. + /// + /// + + if (this[0] && this[0].parentNode) { + return this.domManip(arguments, false, function (elem) { + this.parentNode.insertBefore(elem, this); + }); + } else if (arguments.length) { + var set = jQuery.clean(arguments); + set.push.apply(set, this.toArray()); + return this.pushStack(set, "before", arguments); + } + }; + jQuery.prototype.bind = function (types, data, fn) { + /// + /// Attach a handler to an event for the elements. + /// 1 - bind(eventType, eventData, handler(eventObject)) + /// 2 - bind(eventType, eventData, preventBubble) + /// 3 - bind(events) + /// + /// + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return this.on(types, null, data, fn); + }; + jQuery.prototype.blur = function (data, fn) { + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// 1 - blur(handler(eventObject)) + /// 2 - blur(eventData, handler(eventObject)) + /// 3 - blur() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.change = function (data, fn) { + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// 1 - change(handler(eventObject)) + /// 2 - change(eventData, handler(eventObject)) + /// 3 - change() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.children = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.clearQueue = function (type) { + /// + /// Remove from the queue all items that have not yet been run. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.queue(type || "fx", []); + }; + jQuery.prototype.click = function (data, fn) { + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// 1 - click(handler(eventObject)) + /// 2 - click(eventData, handler(eventObject)) + /// 3 - click() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.clone = function (dataAndEvents, deepDataAndEvents) { + /// + /// Create a deep copy of the set of matched elements. + /// 1 - clone(withDataAndEvents) + /// 2 - clone(withDataAndEvents, deepWithDataAndEvents) + /// + /// + /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. + /// + /// + /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). + /// + /// + + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function () { + return jQuery.clone(this, dataAndEvents, deepDataAndEvents); + }); + }; + jQuery.prototype.closest = function (selectors, context) { + /// + /// 1: Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree. + /// 1.1 - closest(selector) + /// 1.2 - closest(selector, context) + /// 1.3 - closest(jQuery object) + /// 1.4 - closest(element) + /// 2: Gets an array of all the elements and selectors matched against the current element up through the DOM tree. + /// 2.1 - closest(selectors, context) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. + /// + /// + + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if (jQuery.isArray(selectors)) { + var level = 1; + + while (cur && cur.ownerDocument && cur !== context) { + for (i = 0; i < selectors.length; i++) { + + if (jQuery(cur).is(selectors[i])) { + ret.push({ selector: selectors[i], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test(selectors) || typeof selectors !== "string" ? + jQuery(selectors, context || this.context) : + 0; + + for (i = 0, l = this.length; i < l; i++) { + cur = this[i]; + + while (cur) { + if (pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors)) { + ret.push(cur); + break; + + } else { + cur = cur.parentNode; + if (!cur || !cur.ownerDocument || cur === context || cur.nodeType === 11) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack(ret, "closest", selectors); + }; + jQuery.prototype.constructor = function (selector, context) { + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.prototype.contents = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, including text and comment nodes. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.contextmenu = function (data, fn) { + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.css = function (name, value) { + /// + /// 1: Get the value of a style property for the first element in the set of matched elements. + /// 1.1 - css(propertyName) + /// 2: Set one or more CSS properties for the set of matched elements. + /// 2.1 - css(propertyName, value) + /// 2.2 - css(propertyName, function(index, value)) + /// 2.3 - css(map) + /// + /// + /// A CSS property name. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, function (elem, name, value) { + return value !== undefined ? + jQuery.style(elem, name, value) : + jQuery.css(elem, name); + }, name, value, arguments.length > 1); + }; + jQuery.prototype.data = function (key, value) { + /// + /// 1: Store arbitrary data associated with the matched elements. + /// 1.1 - data(key, value) + /// 1.2 - data(obj) + /// 2: Returns value at named data store for the first element in the jQuery collection, as set by data(name, value). + /// 2.1 - data(key) + /// 2.2 - data() + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value; it can be any Javascript type including Array or Object. + /// + /// + + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if (key === undefined) { + if (this.length) { + data = jQuery.data(elem); + + if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) { + attr = elem.attributes; + for (l = attr.length; i < l; i++) { + name = attr[i].name; + + if (name.indexOf("data-") === 0) { + name = jQuery.camelCase(name.substring(5)); + + dataAttr(elem, name, data[name]); + } + } + jQuery._data(elem, "parsedAttrs", true); + } + } + + return data; + } + + // Sets multiple values + if (typeof key === "object") { + return this.each(function () { + jQuery.data(this, key); + }); + } + + parts = key.split(".", 2); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access(this, function (value) { + + if (value === undefined) { + data = this.triggerHandler("getData" + part, [parts[0]]); + + // Try to fetch any internally stored data first + if (data === undefined && elem) { + data = jQuery.data(elem, key); + data = dataAttr(elem, key, data); + } + + return data === undefined && parts[1] ? + this.data(parts[0]) : + data; + } + + parts[1] = value; + this.each(function () { + var self = jQuery(this); + + self.triggerHandler("setData" + part, parts); + jQuery.data(this, key, value); + self.triggerHandler("changeData" + part, parts); + }); + }, null, value, arguments.length > 1, null, false); + }; + jQuery.prototype.dblclick = function (data, fn) { + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// 1 - dblclick(handler(eventObject)) + /// 2 - dblclick(eventData, handler(eventObject)) + /// 3 - dblclick() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.delay = function (time, type) { + /// + /// Set a timer to delay execution of subsequent items in the queue. + /// + /// + /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue(type, function (next, hooks) { + var timeout = setTimeout(next, time); + hooks.stop = function () { + clearTimeout(timeout); + }; + }); + }; + jQuery.prototype.delegate = function (selector, types, data, fn) { + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// 1 - delegate(selector, eventType, handler(eventObject)) + /// 2 - delegate(selector, eventType, eventData, handler(eventObject)) + /// 3 - delegate(selector, events) + /// + /// + /// A selector to filter the elements that trigger the event. + /// + /// + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + return this.on(types, selector, data, fn); + }; + jQuery.prototype.dequeue = function (type) { + /// + /// Execute the next function on the queue for the matched elements. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.each(function () { + jQuery.dequeue(this, type); + }); + }; + jQuery.prototype.detach = function (selector) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + return this.remove(selector, true); + }; + jQuery.prototype.die = function (types, fn) { + /// + /// 1: Remove all event handlers previously attached using .live() from the elements. + /// 1.1 - die() + /// 2: Remove an event handler previously attached using .live() from the elements. + /// 2.1 - die(eventType, handler) + /// 2.2 - die(eventTypes) + /// + /// + /// A string containing a JavaScript event type, such as click or keydown. + /// + /// + /// The function that is no longer to be executed. + /// + /// + + jQuery(this.context).off(types, this.selector || "**", fn); + return this; + }; + jQuery.prototype.domManip = function (args, table, callback) { + + var results, first, fragment, parent, + value = args[0], + scripts = []; + + // We can't cloneNode fragments that contain checked, in WebKit + if (!jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test(value)) { + return this.each(function () { + jQuery(this).domManip(args, table, callback, true); + }); + } + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + var self = jQuery(this); + args[0] = value.call(this, i, table ? self.html() : undefined); + self.domManip(args, table, callback); + }); + } + + if (this[0]) { + parent = value && value.parentNode; + + // If we're in a fragment, just use that instead of building a new one + if (jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length) { + results = { fragment: parent }; + + } else { + results = jQuery.buildFragment(args, this, scripts); + } + + fragment = results.fragment; + + if (fragment.childNodes.length === 1) { + first = fragment = fragment.firstChild; + } else { + first = fragment.firstChild; + } + + if (first) { + table = table && jQuery.nodeName(first, "tr"); + + for (var i = 0, l = this.length, lastIndex = l - 1; i < l; i++) { + callback.call( + table ? + root(this[i], first) : + this[i], + // Make sure that we do not leak memory by inadvertently discarding + // the original fragment (which might have attached data) instead of + // using it; in addition, use the original fragment object for the last + // item instead of first because it can end up being emptied incorrectly + // in certain situations (Bug #8070). + // Fragments from the fragment cache must always be cloned and never used + // in place. + results.cacheable || (l > 1 && i < lastIndex) ? + jQuery.clone(fragment, true, true) : + fragment + ); + } + } + + if (scripts.length) { + jQuery.each(scripts, function (i, elem) { + if (elem.src) { + jQuery.ajax({ + type: "GET", + global: false, + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval((elem.text || elem.textContent || elem.innerHTML || "").replace(rcleanScript, "/*$0*/")); + } + + if (elem.parentNode) { + elem.parentNode.removeChild(elem); + } + }); + } + } + + return this; + }; + jQuery.prototype.each = function (callback, args) { + /// + /// Iterate over a jQuery object, executing a function for each matched element. + /// + /// + /// A function to execute for each matched element. + /// + /// + + return jQuery.each(this, callback, args); + }; + jQuery.prototype.empty = function () { + /// + /// Remove all child nodes of the set of matched elements from the DOM. + /// + /// + + for (var i = 0, elem; (elem = this[i]) != null; i++) { + // Remove element nodes and prevent memory leaks + if (elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + } + + // Remove any remaining nodes + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + return this; + }; + jQuery.prototype.end = function () { + /// + /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. + /// + /// + + return this.prevObject || this.constructor(null); + }; + jQuery.prototype.eq = function (i) { + /// + /// Reduce the set of matched elements to the one at the specified index. + /// 1 - eq(index) + /// 2 - eq(-index) + /// + /// + /// An integer indicating the 0-based position of the element. + /// + /// + + i = +i; + return i === -1 ? + this.slice(i) : + this.slice(i, i + 1); + }; + jQuery.prototype.error = function (data, fn) { + /// + /// Bind an event handler to the "error" JavaScript event. + /// 1 - error(handler(eventObject)) + /// 2 - error(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.extend = function () { + + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.prototype.fadeIn = function (speed, easing, callback) { + /// + /// Display the matched elements by fading them to opaque. + /// 1 - fadeIn(duration, callback) + /// 2 - fadeIn(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeOut = function (speed, easing, callback) { + /// + /// Hide the matched elements by fading them to transparent. + /// 1 - fadeOut(duration, callback) + /// 2 - fadeOut(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeTo = function (speed, to, easing, callback) { + /// + /// Adjust the opacity of the matched elements. + /// 1 - fadeTo(duration, opacity, callback) + /// 2 - fadeTo(duration, opacity, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A number between 0 and 1 denoting the target opacity. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.filter(":hidden").css("opacity", 0).show().end() + .animate({ opacity: to }, speed, easing, callback); + }; + jQuery.prototype.fadeToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements by animating their opacity. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.filter = function (selector) { + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// 1 - filter(selector) + /// 2 - filter(function(index)) + /// 3 - filter(element) + /// 4 - filter(jQuery object) + /// + /// + /// A string containing a selector expression to match the current set of elements against. + /// + /// + + return this.pushStack(winnow(this, selector, true), "filter", selector); + }; + jQuery.prototype.find = function (selector) { + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// 1 - find(selector) + /// 2 - find(jQuery object) + /// 3 - find(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var self = this, + i, l; + + if (typeof selector !== "string") { + return jQuery(selector).filter(function () { + for (i = 0, l = self.length; i < l; i++) { + if (jQuery.contains(self[i], this)) { + return true; + } + } + }); + } + + var ret = this.pushStack("", "find", selector), + length, n, r; + + for (i = 0, l = this.length; i < l; i++) { + length = ret.length; + jQuery.find(selector, this[i], ret); + + if (i > 0) { + // Make sure that the results are unique + for (n = length; n < ret.length; n++) { + for (r = 0; r < length; r++) { + if (ret[r] === ret[n]) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }; + jQuery.prototype.first = function () { + /// + /// Reduce the set of matched elements to the first in the set. + /// + /// + + return this.eq(0); + }; + jQuery.prototype.focus = function (data, fn) { + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// 1 - focus(handler(eventObject)) + /// 2 - focus(eventData, handler(eventObject)) + /// 3 - focus() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusin = function (data, fn) { + /// + /// Bind an event handler to the "focusin" event. + /// 1 - focusin(handler(eventObject)) + /// 2 - focusin(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusout = function (data, fn) { + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// 1 - focusout(handler(eventObject)) + /// 2 - focusout(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.get = function (num) { + /// + /// Retrieve the DOM elements matched by the jQuery object. + /// + /// + /// A zero-based integer indicating which element to retrieve. + /// + /// + + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + (num < 0 ? this[this.length + num] : this[num]); + }; + jQuery.prototype.has = function (target) { + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// 1 - has(selector) + /// 2 - has(contained) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var targets = jQuery(target); + return this.filter(function () { + for (var i = 0, l = targets.length; i < l; i++) { + if (jQuery.contains(this, targets[i])) { + return true; + } + } + }); + }; + jQuery.prototype.hasClass = function (selector) { + /// + /// Determine whether any of the matched elements are assigned the given class. + /// + /// + /// The class name to search for. + /// + /// + + var className = " " + selector + " ", + i = 0, + l = this.length; + for (; i < l; i++) { + if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) > -1) { + return true; + } + } + + return false; + }; + jQuery.prototype.height = function (value) { + /// + /// 1: Get the current computed height for the first element in the set of matched elements. + /// 1.1 - height() + /// 2: Set the CSS height of every matched element. + /// 2.1 - height(value) + /// 2.2 - height(function(index, height)) + /// + /// + /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). + /// + /// + + return jQuery.access(this, function (elem, type, value) { + var doc, docElemProp, orig, ret; + + if (jQuery.isWindow(elem)) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[clientProp]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[clientProp] || docElemProp; + } + + // Get document width or height + if (elem.nodeType === 9) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if (doc[clientProp] >= doc[scrollProp]) { + return doc[clientProp]; + } + + return Math.max( + elem.body[scrollProp], doc[scrollProp], + elem.body[offsetProp], doc[offsetProp] + ); + } + + // Get width or height on the element + if (value === undefined) { + orig = jQuery.css(elem, type); + ret = parseFloat(orig); + return jQuery.isNumeric(ret) ? ret : orig; + } + + // Set the width or height on the element + jQuery(elem).css(type, value); + }, type, value, arguments.length, null); + }; + jQuery.prototype.hide = function (speed, easing, callback) { + /// + /// Hide the matched elements. + /// 1 - hide() + /// 2 - hide(duration, callback) + /// 3 - hide(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + if (speed || speed === 0) { + return this.animate(genFx("hide", 3), speed, easing, callback); + + } else { + var elem, display, + i = 0, + j = this.length; + + for (; i < j; i++) { + elem = this[i]; + if (elem.style) { + display = jQuery.css(elem, "display"); + + if (display !== "none" && !jQuery._data(elem, "olddisplay")) { + jQuery._data(elem, "olddisplay", display); + } + } + } + + // Set the display of the elements in a second loop + // to avoid the constant reflow + for (i = 0; i < j; i++) { + if (this[i].style) { + this[i].style.display = "none"; + } + } + + return this; + } + }; + jQuery.prototype.hover = function (fnOver, fnOut) { + /// + /// 1: Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. + /// 1.1 - hover(handlerIn(eventObject), handlerOut(eventObject)) + /// 2: Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements. + /// 2.1 - hover(handlerInOut(eventObject)) + /// + /// + /// A function to execute when the mouse pointer enters the element. + /// + /// + /// A function to execute when the mouse pointer leaves the element. + /// + /// + + return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); + }; + jQuery.prototype.html = function (value) { + /// + /// 1: Get the HTML contents of the first element in the set of matched elements. + /// 1.1 - html() + /// 2: Set the HTML contents of each element in the set of matched elements. + /// 2.1 - html(htmlString) + /// 2.2 - html(function(index, oldhtml)) + /// + /// + /// A string of HTML to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if (value === undefined) { + return elem.nodeType === 1 ? + elem.innerHTML.replace(rinlinejQuery, "") : + null; + } + + + if (typeof value === "string" && !rnoInnerhtml.test(value) && + (jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value)) && + !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { + + value = value.replace(rxhtmlTag, "<$1>"); + + try { + for (; i < l; i++) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if (elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch (e) { } + } + + if (elem) { + this.empty().append(value); + } + }, null, value, arguments.length); + }; + jQuery.prototype.index = function (elem) { + /// + /// Search for a given element from among the matched elements. + /// 1 - index() + /// 2 - index(selector) + /// 3 - index(element) + /// + /// + /// A selector representing a jQuery collection in which to look for an element. + /// + /// + + + // No argument, return index in parent + if (!elem) { + return (this[0] && this[0].parentNode) ? this.prevAll().length : -1; + } + + // index in selector + if (typeof elem === "string") { + return jQuery.inArray(this[0], jQuery(elem)); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this); + }; + jQuery.prototype.init = function (selector, context, rootjQuery) { + + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if (!selector) { + return this; + } + + // Handle $(DOMElement) + if (selector.nodeType) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if (selector === "body" && !context && document.body) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if (typeof selector === "string") { + // Are we dealing with HTML string or an ID? + if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [null, selector, null]; + + } else { + match = quickExpr.exec(selector); + } + + // Verify a match, and that no context was specified for #id + if (match && (match[1] || !context)) { + + // HANDLE: $(html) -> $(array) + if (match[1]) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec(selector); + + if (ret) { + if (jQuery.isPlainObject(context)) { + selector = [document.createElement(ret[1])]; + jQuery.fn.attr.call(selector, context, true); + + } else { + selector = [doc.createElement(ret[1])]; + } + + } else { + ret = jQuery.buildFragment([match[1]], [doc]); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge(this, selector); + + // HANDLE: $("#id") + } else { + elem = document.getElementById(match[2]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id !== match[2]) { + return rootjQuery.find(selector); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if (!context || context.jquery) { + return (context || rootjQuery).find(selector); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor(context).find(selector); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if (jQuery.isFunction(selector)) { + return rootjQuery.ready(selector); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray(selector, this); + }; + jQuery.prototype.innerHeight = function () { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding but not border. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, "padding")) : + this[type]() : + null; + }; + jQuery.prototype.innerWidth = function () { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding but not border. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, "padding")) : + this[type]() : + null; + }; + jQuery.prototype.insertAfter = function (selector) { + /// + /// Insert every element in the set of matched elements after the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.insertBefore = function (selector) { + /// + /// Insert every element in the set of matched elements before the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.is = function (selector) { + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// 1 - is(selector) + /// 2 - is(function(index)) + /// 3 - is(jQuery object) + /// 4 - is(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test(selector) ? + jQuery(selector, this.context).index(this[0]) >= 0 : + jQuery.filter(selector, this).length > 0 : + this.filter(selector).length > 0); + }; + jQuery.prototype.keydown = function (data, fn) { + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// 1 - keydown(handler(eventObject)) + /// 2 - keydown(eventData, handler(eventObject)) + /// 3 - keydown() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keypress = function (data, fn) { + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// 1 - keypress(handler(eventObject)) + /// 2 - keypress(eventData, handler(eventObject)) + /// 3 - keypress() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keyup = function (data, fn) { + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// 1 - keyup(handler(eventObject)) + /// 2 - keyup(eventData, handler(eventObject)) + /// 3 - keyup() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.last = function () { + /// + /// Reduce the set of matched elements to the final one in the set. + /// + /// + + return this.eq(-1); + }; + jQuery.prototype.length = 0; + jQuery.prototype.live = function (types, data, fn) { + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// 1 - live(events, handler(eventObject)) + /// 2 - live(events, data, handler(eventObject)) + /// 3 - live(events-map) + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + jQuery(this.context).on(types, this.selector, data, fn); + return this; + }; + jQuery.prototype.load = function (url, params, callback) { + /// + /// 1: Bind an event handler to the "load" JavaScript event. + /// 1.1 - load(handler(eventObject)) + /// 1.2 - load(eventData, handler(eventObject)) + /// 2: Load data from the server and place the returned HTML into the matched element. + /// 2.1 - load(url, data, complete(responseText, textStatus, XMLHttpRequest)) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed when the request completes. + /// + /// + + if (typeof url !== "string" && _load) { + return _load.apply(this, arguments); + + // Don't do a request if no elements are being requested + } else if (!this.length) { + return this; + } + + var off = url.indexOf(" "); + if (off >= 0) { + var selector = url.slice(off, url.length); + url = url.slice(0, off); + } + + // Default to a GET request + var type = "GET"; + + // If the second parameter was provided + if (params) { + // If it's a function + if (jQuery.isFunction(params)) { + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if (typeof params === "object") { + params = jQuery.param(params, jQuery.ajaxSettings.traditional); + type = "POST"; + } + } + + var self = this; + + // Request the remote document + jQuery.ajax({ + url: url, + type: type, + dataType: "html", + data: params, + // Complete callback (responseText is used internally) + complete: function (jqXHR, status, responseText) { + // Store the response as specified by the jqXHR object + responseText = jqXHR.responseText; + // If successful, inject the HTML into all the matched elements + if (jqXHR.isResolved()) { + // #4825: Get the actual response in case + // a dataFilter is present in ajaxSettings + jqXHR.done(function (r) { + responseText = r; + }); + // See if a selector was specified + self.html(selector ? + // Create a dummy div to hold the results + jQuery("
") + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append(responseText.replace(rscript, "")) + + // Locate the specified elements + .find(selector) : + + // If not, just inject the full result + responseText); + } + + if (callback) { + self.each(callback, [responseText, status, jqXHR]); + } + } + }); + + return this; + }; + jQuery.prototype.map = function (callback) { + /// + /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. + /// + /// + /// A function object that will be invoked for each element in the current set. + /// + /// + + return this.pushStack(jQuery.map(this, function (elem, i) { + return callback.call(elem, i, elem); + })); + }; + jQuery.prototype.mousedown = function (data, fn) { + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// 1 - mousedown(handler(eventObject)) + /// 2 - mousedown(eventData, handler(eventObject)) + /// 3 - mousedown() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseenter = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// 1 - mouseenter(handler(eventObject)) + /// 2 - mouseenter(eventData, handler(eventObject)) + /// 3 - mouseenter() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseleave = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// 1 - mouseleave(handler(eventObject)) + /// 2 - mouseleave(eventData, handler(eventObject)) + /// 3 - mouseleave() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mousemove = function (data, fn) { + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// 1 - mousemove(handler(eventObject)) + /// 2 - mousemove(eventData, handler(eventObject)) + /// 3 - mousemove() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseout = function (data, fn) { + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// 1 - mouseout(handler(eventObject)) + /// 2 - mouseout(eventData, handler(eventObject)) + /// 3 - mouseout() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseover = function (data, fn) { + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// 1 - mouseover(handler(eventObject)) + /// 2 - mouseover(eventData, handler(eventObject)) + /// 3 - mouseover() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseup = function (data, fn) { + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// 1 - mouseup(handler(eventObject)) + /// 2 - mouseup(eventData, handler(eventObject)) + /// 3 - mouseup() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.next = function (until, selector) { + /// + /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.nextAll = function (until, selector) { + /// + /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.nextUntil = function (until, selector) { + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// 1 - nextUntil(selector, filter) + /// 2 - nextUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching following sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.not = function (selector) { + /// + /// Remove elements from the set of matched elements. + /// 1 - not(selector) + /// 2 - not(elements) + /// 3 - not(function(index)) + /// 4 - not(jQuery object) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return this.pushStack(winnow(this, selector, false), "not", selector); + }; + jQuery.prototype.off = function (types, selector, fn) { + /// + /// Remove an event handler. + /// 1 - off(events, selector, handler(eventObject)) + /// 2 - off(events-map, selector) + /// + /// + /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". + /// + /// + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// + /// + /// A handler function previously attached for the event(s), or the special value false. + /// + /// + + if (types && types.preventDefault && types.handleObj) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery(types.delegateTarget).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if (typeof types === "object") { + // ( types-object [, selector] ) + for (var type in types) { + this.off(type, selector, types[type]); + } + return this; + } + if (selector === false || typeof selector === "function") { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if (fn === false) { + fn = returnFalse; + } + return this.each(function () { + jQuery.event.remove(this, types, fn, selector); + }); + }; + jQuery.prototype.offset = function (options) { + /// + /// 1: Get the current coordinates of the first element in the set of matched elements, relative to the document. + /// 1.1 - offset() + /// 2: Set the current coordinates of every element in the set of matched elements, relative to the document. + /// 2.1 - offset(coordinates) + /// 2.2 - offset(function(index, coords)) + /// + /// + /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. + /// + /// + + if (arguments.length) { + return options === undefined ? + this : + this.each(function (i) { + jQuery.offset.setOffset(this, options, i); + }); + } + + var elem = this[0], + doc = elem && elem.ownerDocument; + + if (!doc) { + return null; + } + + if (elem === doc.body) { + return jQuery.offset.bodyOffset(elem); + } + + return getOffset(elem, doc, doc.documentElement); + }; + jQuery.prototype.offsetParent = function () { + /// + /// Get the closest ancestor element that is positioned. + /// + /// + + return this.map(function () { + var offsetParent = this.offsetParent || document.body; + while (offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static")) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent; + }); + }; + jQuery.prototype.on = function (types, selector, data, fn, /*INTERNAL*/ one) { + /// + /// Attach an event handler function for one or more events to the selected elements. + /// 1 - on(events, selector, data, handler(eventObject)) + /// 2 - on(events-map, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + var origFn, type; + + // Types can be a map of types/handlers + if (typeof types === "object") { + // ( types-Object, selector, data ) + if (typeof selector !== "string") { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for (type in types) { + this.on(type, selector, data, types[type], one); + } + return this; + } + + if (data == null && fn == null) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if (fn == null) { + if (typeof selector === "string") { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if (fn === false) { + fn = returnFalse; + } else if (!fn) { + return this; + } + + if (one === 1) { + origFn = fn; + fn = function (event) { + // Can use an empty set, since event contains the info + jQuery().off(event); + return origFn.apply(this, arguments); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); + } + return this.each(function () { + jQuery.event.add(this, types, fn, data, selector); + }); + }; + jQuery.prototype.one = function (types, selector, data, fn) { + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// 1 - one(events, data, handler(eventObject)) + /// 2 - one(events, selector, data, handler(eventObject)) + /// 3 - one(events-map, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + return this.on(types, selector, data, fn, 1); + }; + jQuery.prototype.outerHeight = function (margin) { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, margin ? "margin" : "border")) : + this[type]() : + null; + }; + jQuery.prototype.outerWidth = function (margin) { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding and border. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, margin ? "margin" : "border")) : + this[type]() : + null; + }; + jQuery.prototype.parent = function (until, selector) { + /// + /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.parents = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.parentsUntil = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - parentsUntil(selector, filter) + /// 2 - parentsUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching ancestor elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.position = function () { + /// + /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. + /// + /// + + if (!this[0]) { + return null; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat(jQuery.css(elem, "marginTop")) || 0; + offset.left -= parseFloat(jQuery.css(elem, "marginLeft")) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat(jQuery.css(offsetParent[0], "borderTopWidth")) || 0; + parentOffset.left += parseFloat(jQuery.css(offsetParent[0], "borderLeftWidth")) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }; + jQuery.prototype.prepend = function () { + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// 1 - prepend(content, content) + /// 2 - prepend(function(index, html)) + /// + /// + /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1) { + this.insertBefore(elem, this.firstChild); + } + }); + }; + jQuery.prototype.prependTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the beginning of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.prev = function (until, selector) { + /// + /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.prevAll = function (until, selector) { + /// + /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.prevUntil = function (until, selector) { + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - prevUntil(selector, filter) + /// 2 - prevUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.promise = function (type, object) { + /// + /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. + /// + /// + /// The type of queue that needs to be observed. + /// + /// + /// Object onto which the promise methods have to be attached + /// + /// + + if (typeof type !== "string") { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if (!(--count)) { + defer.resolveWith(elements, [elements]); + } + } + while (i--) { + if ((tmp = jQuery.data(elements[i], deferDataKey, undefined, true) || + (jQuery.data(elements[i], queueDataKey, undefined, true) || + jQuery.data(elements[i], markDataKey, undefined, true)) && + jQuery.data(elements[i], deferDataKey, jQuery.Callbacks("once memory"), true))) { + count++; + tmp.add(resolve); + } + } + resolve(); + return defer.promise(object); + }; + jQuery.prototype.prop = function (name, value) { + /// + /// 1: Get the value of a property for the first element in the set of matched elements. + /// 1.1 - prop(propertyName) + /// 2: Set one or more properties for the set of matched elements. + /// 2.1 - prop(propertyName, value) + /// 2.2 - prop(map) + /// 2.3 - prop(propertyName, function(index, oldPropertyValue)) + /// + /// + /// The name of the property to set. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, jQuery.prop, name, value, arguments.length > 1); + }; + jQuery.prototype.pushStack = function (elems, name, selector) { + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// 1 - pushStack(elements) + /// 2 - pushStack(elements, name, arguments) + /// + /// + /// An array of elements to push onto the stack and make into a new jQuery object. + /// + /// + /// The name of a jQuery method that generated the array of elements. + /// + /// + /// The arguments that were passed in to the jQuery method (for serialization). + /// + /// + + // Build a new jQuery matched element set + var ret = this.constructor(); + + if (jQuery.isArray(elems)) { + push.apply(ret, elems); + + } else { + jQuery.merge(ret, elems); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if (name === "find") { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if (name) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }; + jQuery.prototype.queue = function (type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched elements. + /// 1.1 - queue(queueName) + /// 2: Manipulate the queue of functions to be executed on the matched elements. + /// 2.1 - queue(queueName, newQueue) + /// 2.2 - queue(queueName, callback( next )) + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var setter = 2; + + if (typeof type !== "string") { + data = type; + type = "fx"; + setter--; + } + + if (arguments.length < setter) { + return jQuery.queue(this[0], type); + } + + return data === undefined ? + this : + this.each(function () { + var queue = jQuery.queue(this, type, data); + + if (type === "fx" && queue[0] !== "inprogress") { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.ready = function (fn) { + /// + /// Specify a function to execute when the DOM is fully loaded. + /// + /// + /// A function to execute after the DOM is ready. + /// + /// + + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add(fn); + + return this; + }; + jQuery.prototype.remove = function (selector, keepData) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + for (var i = 0, elem; (elem = this[i]) != null; i++) { + if (!selector || jQuery.filter(selector, [elem]).length) { + if (!keepData && elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + jQuery.cleanData([elem]); + } + + if (elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + } + + return this; + }; + jQuery.prototype.removeAttr = function (name) { + /// + /// Remove an attribute from each element in the set of matched elements. + /// + /// + /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. + /// + /// + + return this.each(function () { + jQuery.removeAttr(this, name); + }); + }; + jQuery.prototype.removeClass = function (value) { + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// 1 - removeClass(className) + /// 2 - removeClass(function(index, class)) + /// + /// + /// One or more space-separated classes to be removed from the class attribute of each matched element. + /// + /// + + var classNames, i, l, elem, className, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).removeClass(value.call(this, j, this.className)); + }); + } + + if ((value && typeof value === "string") || value === undefined) { + classNames = (value || "").split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1 && elem.className) { + if (value) { + className = (" " + elem.className + " ").replace(rclass, " "); + for (c = 0, cl = classNames.length; c < cl; c++) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim(className); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }; + jQuery.prototype.removeData = function (key) { + /// + /// Remove a previously-stored piece of data. + /// 1 - removeData(name) + /// 2 - removeData(list) + /// + /// + /// A string naming the piece of data to delete. + /// + /// + + return this.each(function () { + jQuery.removeData(this, key); + }); + }; + jQuery.prototype.removeProp = function (name) { + /// + /// Remove a property for the set of matched elements. + /// + /// + /// The name of the property to set. + /// + /// + + name = jQuery.propFix[name] || name; + return this.each(function () { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[name] = undefined; + delete this[name]; + } catch (e) { } + }); + }; + jQuery.prototype.replaceAll = function (selector) { + /// + /// Replace each target element with the set of matched elements. + /// + /// + /// A selector expression indicating which element(s) to replace. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.replaceWith = function (value) { + /// + /// Replace each element in the set of matched elements with the provided new content. + /// 1 - replaceWith(newContent) + /// 2 - replaceWith(function) + /// + /// + /// The content to insert. May be an HTML string, DOM element, or jQuery object. + /// + /// + + if (this[0] && this[0].parentNode) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if (jQuery.isFunction(value)) { + return this.each(function (i) { + var self = jQuery(this), old = self.html(); + self.replaceWith(value.call(this, i, old)); + }); + } + + if (typeof value !== "string") { + value = jQuery(value).detach(); + } + + return this.each(function () { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery(this).remove(); + + if (next) { + jQuery(next).before(value); + } else { + jQuery(parent).append(value); + } + }); + } else { + return this.length ? + this.pushStack(jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value) : + this; + } + }; + jQuery.prototype.resize = function (data, fn) { + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// 1 - resize(handler(eventObject)) + /// 2 - resize(eventData, handler(eventObject)) + /// 3 - resize() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scroll = function (data, fn) { + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// 1 - scroll(handler(eventObject)) + /// 2 - scroll(eventData, handler(eventObject)) + /// 3 - scroll() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scrollLeft = function (val) { + /// + /// 1: Get the current horizontal position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollLeft() + /// 2: Set the current horizontal position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollLeft(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + jQuery.support.boxModel && win.document.documentElement[method] || + win.document.body[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.scrollTop = function (val) { + /// + /// 1: Get the current vertical position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollTop() + /// 2: Set the current vertical position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollTop(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + jQuery.support.boxModel && win.document.documentElement[method] || + win.document.body[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.select = function (data, fn) { + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// 1 - select(handler(eventObject)) + /// 2 - select(eventData, handler(eventObject)) + /// 3 - select() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.serialize = function () { + /// + /// Encode a set of form elements as a string for submission. + /// + /// + + return jQuery.param(this.serializeArray()); + }; + jQuery.prototype.serializeArray = function () { + /// + /// Encode a set of form elements as an array of names and values. + /// + /// + + return this.map(function () { + return this.elements ? jQuery.makeArray(this.elements) : this; + }) + .filter(function () { + return this.name && !this.disabled && + (this.checked || rselectTextarea.test(this.nodeName) || + rinput.test(this.type)); + }) + .map(function (i, elem) { + var val = jQuery(this).val(); + + return val == null ? + null : + jQuery.isArray(val) ? + jQuery.map(val, function (val, i) { + return { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }) : + { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }).get(); + }; + jQuery.prototype.show = function (speed, easing, callback) { + /// + /// Display the matched elements. + /// 1 - show() + /// 2 - show(duration, callback) + /// 3 - show(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var elem, display; + + if (speed || speed === 0) { + return this.animate(genFx("show", 3), speed, easing, callback); + + } else { + for (var i = 0, j = this.length; i < j; i++) { + elem = this[i]; + + if (elem.style) { + display = elem.style.display; + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if (!jQuery._data(elem, "olddisplay") && display === "none") { + display = elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ((display === "" && jQuery.css(elem, "display") === "none") || + !jQuery.contains(elem.ownerDocument.documentElement, elem)) { + jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for (i = 0; i < j; i++) { + elem = this[i]; + + if (elem.style) { + display = elem.style.display; + + if (display === "" || display === "none") { + elem.style.display = jQuery._data(elem, "olddisplay") || ""; + } + } + } + + return this; + } + }; + jQuery.prototype.siblings = function (until, selector) { + /// + /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.size = function () { + /// + /// Return the number of elements in the jQuery object. + /// + /// + + return this.length; + }; + jQuery.prototype.slice = function () { + /// + /// Reduce the set of matched elements to a subset specified by a range of indices. + /// + /// + /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. + /// + /// + /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. + /// + /// + + return this.pushStack(slice.apply(this, arguments), + "slice", slice.call(arguments).join(",")); + }; + jQuery.prototype.slideDown = function (speed, easing, callback) { + /// + /// Display the matched elements with a sliding motion. + /// 1 - slideDown(duration, callback) + /// 2 - slideDown(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements with a sliding motion. + /// 1 - slideToggle(duration, callback) + /// 2 - slideToggle(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideUp = function (speed, easing, callback) { + /// + /// Hide the matched elements with a sliding motion. + /// 1 - slideUp(duration, callback) + /// 2 - slideUp(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.stop = function (type, clearQueue, gotoEnd) { + /// + /// Stop the currently-running animation on the matched elements. + /// 1 - stop(clearQueue, jumpToEnd) + /// 2 - stop(queue, clearQueue, jumpToEnd) + /// + /// + /// The name of the queue in which to stop animations. + /// + /// + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// + /// + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + + if (typeof type !== "string") { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if (clearQueue && type !== false) { + this.queue(type || "fx", []); + } + + return this.each(function () { + var index, + hadTimers = false, + timers = jQuery.timers, + data = jQuery._data(this); + + // clear marker counters if we know they won't be + if (!gotoEnd) { + jQuery._unmark(true, this); + } + + function stopQueue(elem, data, index) { + var hooks = data[index]; + jQuery.removeData(elem, index, true); + hooks.stop(gotoEnd); + } + + if (type == null) { + for (index in data) { + if (data[index] && data[index].stop && index.indexOf(".run") === index.length - 4) { + stopQueue(this, data, index); + } + } + } else if (data[index = type + ".run"] && data[index].stop) { + stopQueue(this, data, index); + } + + for (index = timers.length; index--;) { + if (timers[index].elem === this && (type == null || timers[index].queue === type)) { + if (gotoEnd) { + + // force the next step to be the last + timers[index](true); + } else { + timers[index].saveState(); + } + hadTimers = true; + timers.splice(index, 1); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if (!(gotoEnd && hadTimers)) { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.submit = function (data, fn) { + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// 1 - submit(handler(eventObject)) + /// 2 - submit(eventData, handler(eventObject)) + /// 3 - submit() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.text = function (value) { + /// + /// 1: Get the combined text contents of each element in the set of matched elements, including their descendants. + /// 1.1 - text() + /// 2: Set the content of each element in the set of matched elements to the specified text. + /// 2.1 - text(textString) + /// 2.2 - text(function(index, text)) + /// + /// + /// A string of text to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + return value === undefined ? + jQuery.text(this) : + this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); + }, null, value, arguments.length); + }; + jQuery.prototype.toArray = function () { + /// + /// Retrieve all the DOM elements contained in the jQuery set, as an array. + /// + /// + + return slice.call(this, 0); + }; + jQuery.prototype.toggle = function (fn, fn2, callback) { + /// + /// 1: Bind two or more handlers to the matched elements, to be executed on alternate clicks. + /// 1.1 - toggle(handler(eventObject), handler(eventObject), handler(eventObject)) + /// 2: Display or hide the matched elements. + /// 2.1 - toggle(duration, callback) + /// 2.2 - toggle(duration, easing, callback) + /// 2.3 - toggle(showOrHide) + /// + /// + /// A function to execute every even time the element is clicked. + /// + /// + /// A function to execute every odd time the element is clicked. + /// + /// + /// Additional handlers to cycle through after clicks. + /// + /// + + var bool = typeof fn === "boolean"; + + if (jQuery.isFunction(fn) && jQuery.isFunction(fn2)) { + this._toggle.apply(this, arguments); + + } else if (fn == null || bool) { + this.each(function () { + var state = bool ? fn : jQuery(this).is(":hidden"); + jQuery(this)[state ? "show" : "hide"](); + }); + + } else { + this.animate(genFx("toggle", 3), fn, fn2, callback); + } + + return this; + }; + jQuery.prototype.toggleClass = function (value, stateVal) { + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// 1 - toggleClass(className) + /// 2 - toggleClass(className, switch) + /// 3 - toggleClass(switch) + /// 4 - toggleClass(function(index, class, switch), switch) + /// + /// + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// + /// + /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. + /// + /// + + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal); + }); + } + + return this.each(function () { + if (type === "string") { + // toggle individual class names + var className, + i = 0, + self = jQuery(this), + state = stateVal, + classNames = value.split(rspace); + + while ((className = classNames[i++])) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass(className); + self[state ? "addClass" : "removeClass"](className); + } + + } else if (type === "undefined" || type === "boolean") { + if (this.className) { + // store className if set + jQuery._data(this, "__className__", this.className); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data(this, "__className__") || ""; + } + }); + }; + jQuery.prototype.trigger = function (type, data) { + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// 1 - trigger(eventType, extraParameters) + /// 2 - trigger(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// Additional parameters to pass along to the event handler. + /// + /// + + return this.each(function () { + jQuery.event.trigger(type, data, this); + }); + }; + jQuery.prototype.triggerHandler = function (type, data) { + /// + /// Execute all handlers attached to an element for an event. + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// An array of additional parameters to pass along to the event handler. + /// + /// + + if (this[0]) { + return jQuery.event.trigger(type, data, this[0], true); + } + }; + jQuery.prototype.unbind = function (types, fn) { + /// + /// Remove a previously-attached event handler from the elements. + /// 1 - unbind(eventType, handler(eventObject)) + /// 2 - unbind(eventType, false) + /// 3 - unbind(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// The function that is to be no longer executed. + /// + /// + + return this.off(types, null, fn); + }; + jQuery.prototype.undelegate = function (selector, types, fn) { + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// 1 - undelegate() + /// 2 - undelegate(selector, eventType) + /// 3 - undelegate(selector, eventType, handler(eventObject)) + /// 4 - undelegate(selector, events) + /// 5 - undelegate(namespace) + /// + /// + /// A selector which will be used to filter the event results. + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1 ? this.off(selector, "**") : this.off(types, selector, fn); + }; + jQuery.prototype.unload = function (data, fn) { + /// + /// Bind an event handler to the "unload" JavaScript event. + /// 1 - unload(handler(eventObject)) + /// 2 - unload(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.unwrap = function () { + /// + /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. + /// + /// + + return this.parent().each(function () { + if (!jQuery.nodeName(this, "body")) { + jQuery(this).replaceWith(this.childNodes); + } + }).end(); + }; + jQuery.prototype.val = function (value) { + /// + /// 1: Get the current value of the first element in the set of matched elements. + /// 1.1 - val() + /// 2: Set the value of each element in the set of matched elements. + /// 2.1 - val(value) + /// 2.2 - val(function(index, value)) + /// + /// + /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. + /// + /// + + var hooks, ret, isFunction, + elem = this[0]; + + if (!arguments.length) { + if (elem) { + hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()]; + + if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction(value); + + return this.each(function (i) { + var self = jQuery(this), val; + + if (this.nodeType !== 1) { + return; + } + + if (isFunction) { + val = value.call(this, i, self.val()); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if (val == null) { + val = ""; + } else if (typeof val === "number") { + val += ""; + } else if (jQuery.isArray(val)) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; + + // If set returns undefined, fall back to normal setting + if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) { + this.value = val; + } + }); + }; + jQuery.prototype.width = function (value) { + /// + /// 1: Get the current computed width for the first element in the set of matched elements. + /// 1.1 - width() + /// 2: Set the CSS width of each element in the set of matched elements. + /// 2.1 - width(value) + /// 2.2 - width(function(index, width)) + /// + /// + /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). + /// + /// + + return jQuery.access(this, function (elem, type, value) { + var doc, docElemProp, orig, ret; + + if (jQuery.isWindow(elem)) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[clientProp]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[clientProp] || docElemProp; + } + + // Get document width or height + if (elem.nodeType === 9) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if (doc[clientProp] >= doc[scrollProp]) { + return doc[clientProp]; + } + + return Math.max( + elem.body[scrollProp], doc[scrollProp], + elem.body[offsetProp], doc[offsetProp] + ); + } + + // Get width or height on the element + if (value === undefined) { + orig = jQuery.css(elem, type); + ret = parseFloat(orig); + return jQuery.isNumeric(ret) ? ret : orig; + } + + // Set the width or height on the element + jQuery(elem).css(type, value); + }, type, value, arguments.length, null); + }; + jQuery.prototype.wrap = function (html) { + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// 1 - wrap(wrappingElement) + /// 2 - wrap(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + var isFunction = jQuery.isFunction(html); + + return this.each(function (i) { + jQuery(this).wrapAll(isFunction ? html.call(this, i) : html); + }); + }; + jQuery.prototype.wrapAll = function (html) { + /// + /// Wrap an HTML structure around all elements in the set of matched elements. + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapAll(html.call(this, i)); + }); + } + + if (this[0]) { + // The elements to wrap the target around + var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true); + + if (this[0].parentNode) { + wrap.insertBefore(this[0]); + } + + wrap.map(function () { + var elem = this; + + while (elem.firstChild && elem.firstChild.nodeType === 1) { + elem = elem.firstChild; + } + + return elem; + }).append(this); + } + + return this; + }; + jQuery.prototype.wrapInner = function (html) { + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// 1 - wrapInner(wrappingElement) + /// 2 - wrapInner(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapInner(html.call(this, i)); + }); + } + + return this.each(function () { + var self = jQuery(this), + contents = self.contents(); + + if (contents.length) { + contents.wrapAll(html); + + } else { + self.append(html); + } + }); + }; + jQuery.fn = jQuery.prototype; + jQuery.fn.init.prototype = jQuery.fn; + window.jQuery = window.$ = jQuery; +})(window); \ No newline at end of file diff --git a/Web/Scripts/jquery-1.7.2.js b/Web/Scripts/jquery-1.7.2.js new file mode 100644 index 0000000..3774ff9 --- /dev/null +++ b/Web/Scripts/jquery-1.7.2.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
" + + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and + + + +@using (Html.BeginForm("Index", "CreateLog", FormMethod.Post)) +{ + if (!blackBerry) { + @:
+ @ViewBag.Title + } + @Html.ValidationSummary(true) + @Html.EditorForModel() +
+ +
+ if (!blackBerry) + { + @:
+ } +} diff --git a/Web/Views/CreateLog/RecentLogs.cshtml b/Web/Views/CreateLog/RecentLogs.cshtml new file mode 100644 index 0000000..70524be --- /dev/null +++ b/Web/Views/CreateLog/RecentLogs.cshtml @@ -0,0 +1,47 @@ +@using MileageTraker.Web.Models +@using MileageTraker.Web.Utility +@model IEnumerable + +@if (Model.Any()) +{ +

Recent Logs for @ViewData["employeeName"]

+ + + + + + + + + + @foreach (var log in Model) + { + + + + + + + } +
+ Date + + City + + End ODO + + Type +
+ @Html.Encode(log.Date.ToShortDateString()) + + @Html.Encode(log.CityName) + + @Html.Encode(log.EndOdometer) + + @Html.Encode(log.LogType.Enum.GetDisplayName()) +
+} +else +{ +

Mileage history not found for for "@ViewData["employeeName"]"

+} \ No newline at end of file diff --git a/Web/Views/CreateLog/Success.cshtml b/Web/Views/CreateLog/Success.cshtml new file mode 100644 index 0000000..e53901f --- /dev/null +++ b/Web/Views/CreateLog/Success.cshtml @@ -0,0 +1,29 @@ +@using MileageTraker.Web.Utility +@model MileageTraker.Web.ViewModels.CreateLogViewModel +@{ + + ViewBag.Title = "Success"; + var blackBerry = Request.IsBlackBerry(); + ViewBag.PageStyle = blackBerry ? "~/Content/CreateLog/BlackBerry.css" : "~/Content/CreateLog/Index.css"; + Layout = "~/Views/Shared/_Layout.min.cshtml"; +} + +@if (!blackBerry) { + @:
+ @ViewBag.Title +} +

+ You've successfully created an entry + for @Html.Encode(Model.EmployeeName) + traveling to @Html.Encode(Model.CityName) + on @Html.Encode(Model.Date) + in VehicleId @Html.Encode(Model.VehicleId) +

+

+ @Html.ActionLink("Create another", "Index", null, new { @class = "ui-button" }) +

+@if (!blackBerry) +{ + @:
+} + diff --git a/Web/Views/Home/About.cshtml b/Web/Views/Home/About.cshtml new file mode 100644 index 0000000..986bc06 --- /dev/null +++ b/Web/Views/Home/About.cshtml @@ -0,0 +1,8 @@ +@{ + ViewBag.Title = "About Us"; +} + +

About

+

+ Put content here. +

diff --git a/Web/Views/Log/Create.cshtml b/Web/Views/Log/Create.cshtml new file mode 100644 index 0000000..e73ad3e --- /dev/null +++ b/Web/Views/Log/Create.cshtml @@ -0,0 +1,25 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Create Log"; +} + +

@ViewBag.Title

+ + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
+ Log + @Html.EditorForModel() +

+ +

+
+} + +

+ @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

diff --git a/Web/Views/Log/Delete.cshtml b/Web/Views/Log/Delete.cshtml new file mode 100644 index 0000000..91cb593 --- /dev/null +++ b/Web/Views/Log/Delete.cshtml @@ -0,0 +1,19 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Delete Log"; +} + +

@ViewBag.Title

+ +

Are you sure you want to delete this?

+
+ Log + @Html.DisplayForModel() +
+@using (Html.BeginForm()) { +

+ + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

+} diff --git a/Web/Views/Log/Details.cshtml b/Web/Views/Log/Details.cshtml new file mode 100644 index 0000000..b2f0ba1 --- /dev/null +++ b/Web/Views/Log/Details.cshtml @@ -0,0 +1,23 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Log Details"; +} + +

@ViewBag.Title

+

+ @Html.ActionLink("Previous", "PreviousDetails", new { id = Model.LogId }, new { @class = "ui-button" }) + @Html.ActionLink("Next", "NextDetails", new { id = Model.LogId }, new { @class = "ui-button" }) + @if(TempData["Message"] != null) { + @TempData["Message"] + } +

+ +
+ Log + @Html.DisplayForModel() +
+

+ @Html.ActionLink("Edit", "Edit", new { id = Model.LogId }, new { @class = "ui-button" }) + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

diff --git a/Web/Views/Log/DetailsPartial.cshtml b/Web/Views/Log/DetailsPartial.cshtml new file mode 100644 index 0000000..85b44f4 --- /dev/null +++ b/Web/Views/Log/DetailsPartial.cshtml @@ -0,0 +1,10 @@ +@using MileageTraker.Web.ViewModels +@model LogPartialDetails +@{ + Layout = null; +} +
Previous Log
+@Html.DisplayForModel() +

+@Html.ActionLink("Details", "Details", new { id = Model.LogId }) +

\ No newline at end of file diff --git a/Web/Views/Log/Edit.cshtml b/Web/Views/Log/Edit.cshtml new file mode 100644 index 0000000..69352b7 --- /dev/null +++ b/Web/Views/Log/Edit.cshtml @@ -0,0 +1,27 @@ +@model MileageTraker.Web.Models.Log + +@{ + ViewBag.Title = "Edit Log"; +} + +

@ViewBag.Title

+ + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
+ Log + + @Html.EditorForModel() + +

+ +

+
+} + +

+ @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

diff --git a/Web/Views/Log/Empty.cshtml b/Web/Views/Log/Empty.cshtml new file mode 100644 index 0000000..0125065 --- /dev/null +++ b/Web/Views/Log/Empty.cshtml @@ -0,0 +1,8 @@ +@{ + ViewBag.Title = "No Logs"; +} + +

@ViewBag.Title

+
+ No logs have been added. @Html.ActionLink("Create Log", "Create", null, new { @class = "ui-button" }). +
\ No newline at end of file diff --git a/Web/Views/Log/Index.cshtml b/Web/Views/Log/Index.cshtml new file mode 100644 index 0000000..655840f --- /dev/null +++ b/Web/Views/Log/Index.cshtml @@ -0,0 +1,56 @@ +@using MileageTraker.Web.Utility +@using MileageTraker.Web.ViewModels +@model LogResultsViewModel + +@{ + ViewBag.Title = "Logs"; + var grid = new WebGrid(Model.Logs, rowsPerPage: 45); +} + +

@ViewBag.Title

+@section Styles { + +} + + +

+ @using (Html.BeginForm("Index", "Log", FormMethod.Get, new { id = "filter" })) + { + @Html.EditorForModel() + + } +

+

+

+ @Html.ActionLink("Vehicle Mileage", "MonthlyVehicleMileage", new { Year = Model.SelectedYear, Month = Model.SelectedMonth, LogType = Model.SelectedLogType }, new { @class = "ui-button" }) + @Html.ActionLink("Employee Mileage", "MonthlyEmployeeMileage", new { Year = Model.SelectedYear, Month = Model.SelectedMonth, LogType = Model.SelectedLogType }, new { @class = "ui-button" }) + @Html.ActionLink("Add New Log", "Create", null, new { @class = "ui-button" }) + @Html.ActionLink("Export", "Export", new { Year = Model.SelectedYear, Month = Model.SelectedMonth, LogType = Model.SelectedLogType }, new { @class = "ui-button" }) +
+

+ +
+ @grid.GetHtml(columns: + grid.Columns( + grid.Column("VehicleId", "Vehicle ID", item => Html.ActionLink((string)item.VehicleId, "DetailsPartial", "Vehicle", new { id = item.VehicleId }, new { @class = "qtip-modal" })), + grid.Column("EndOdometer", "End ODO"), + grid.Column("Miles", canSort: false, format: item => + { + if (item.PreviousLogId != null) + { + string miles = (item.EndOdometer - item.PreviousLogEndOdometer).ToString(); + return Html.ActionLink(miles, "DetailsPartial", new { id = item.PreviousLogId }, new { @class = "qtip-modal" }); + } + return Html.Raw("?"); + }), + grid.Column("LogType", "Type", item => ((Enum)item.LogType).GetDisplayShortName()), + grid.Column("GasPurchased", "Gas", item => item.GasPurchased > 0 ? String.Format("{0:0.000}", item.GasPurchased) : string.Empty), + grid.Column("Date", format: item => item.Date.ToString("d")), + grid.Column("CityName", "City Name"), + grid.Column("EmployeeName", "Employee Name"), + grid.Column(format: item => Html.ActionLink("Edit", "Edit", new { id = item.LogId })), + grid.Column(format: item => Html.ActionLink("Details", "Details", new { id = item.LogId })), + grid.Column(format: item => Html.ActionLink("Delete", "Delete", new { id = item.LogId })) + ) + ) +
diff --git a/Web/Views/Log/LogsSummary.cshtml b/Web/Views/Log/LogsSummary.cshtml new file mode 100644 index 0000000..9a4041c --- /dev/null +++ b/Web/Views/Log/LogsSummary.cshtml @@ -0,0 +1,48 @@ +@using System.Globalization +@using MileageTraker.Web.Models +@model IEnumerable> + +
+ + + @foreach (var log in Model) + { + + + + + + @if (log.Item1 != null) + { + + + } + else + { + + } + + } + + + + + + +
DateCityEnd ODOStart ODOMiles
+ @Html.Encode(log.Item2.Date.ToShortDateString()) + + @Html.Encode(log.Item2.CityName) + + @Html.ActionLink(log.Item2.EndOdometer.ToString(CultureInfo.InvariantCulture), "Details", "Log", new {id = log.Item2.LogId}, null) + + @Html.ActionLink(log.Item1.EndOdometer.ToString(CultureInfo.InvariantCulture), "Details", "Log", new {id = log.Item1.LogId}, null) + + @(log.Item2.EndOdometer - log.Item1.EndOdometer) + + ? +
+ Total: + @Model.Sum(log => log.Item1 != null ? log.Item2.EndOdometer - log.Item1.EndOdometer : 0) +
+
\ No newline at end of file diff --git a/Web/Views/Log/MonthlyEmployeeMileage.cshtml b/Web/Views/Log/MonthlyEmployeeMileage.cshtml new file mode 100644 index 0000000..844f736 --- /dev/null +++ b/Web/Views/Log/MonthlyEmployeeMileage.cshtml @@ -0,0 +1,54 @@ +@model MileageTraker.Web.ViewModels.EmployeeMileageViewModel +@{ + ViewBag.Title = "Employee Mileage Report"; +} +

@ViewBag.Title

+ + + +

+ @Html.ActionLink("Logs", "Index", "Log", Model.Query, new { @class = "ui-button" }) +

+ @Html.DisplayFor(m => m.Query.Year) + @Html.DisplayFor(m => m.Query.Month) + @if (Model.Query.LogType.HasValue) + { + @Html.DisplayFor(m => m.Query.LogType) + } + + + + + + + + @foreach (var item in Model.Items) + { + + + + + + + } + +
+ Employee + + Trips + + Total Miles + + Total Gas Purchased +
+ @Html.DisplayTextFor(i => item.EmployeeName) + + @Html.DisplayTextFor(i => item.TripCount) + lp.Item1 == null)){ + @:class="ui-state-error" + }> + @Html.DisplayTextFor(i => item.Miles) + @Html.Partial("LogsSummary", item.LogPairs) + + @Html.DisplayTextFor(i => item.GasPurchased) +
Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased)
diff --git a/Web/Views/Log/MonthlyVehicleMileage.cshtml b/Web/Views/Log/MonthlyVehicleMileage.cshtml new file mode 100644 index 0000000..5484640 --- /dev/null +++ b/Web/Views/Log/MonthlyVehicleMileage.cshtml @@ -0,0 +1,55 @@ +@using System.Globalization +@model MileageTraker.Web.ViewModels.VehicleMileageViewModel +@{ + ViewBag.Title = "Vehicle Mileage Report"; +} +

@ViewBag.Title

+ + + +

+ @Html.ActionLink("Logs", "Index", "Log", Model.Query, new { @class = "ui-button" }) +

+ @Html.DisplayFor(m => m.Query.Year) + @Html.DisplayFor(m => m.Query.Month) + @if (Model.Query.LogType.HasValue) + { + @Html.DisplayFor(m => m.Query.LogType) + } + + + + + + + + @foreach (var item in Model.Items) + { + + + + + + + } + +
+ Vehicle Id + + Prog + + Total Miles + + Total Gas Purchased +
+ @Html.ActionLink(item.VehicleId, "Details", "Vehicle", new { id = item.VehicleId }, null) + + @Html.DisplayTextFor(i => item.Prog) + lp.Item1 == null)){ + @:class="ui-state-error" + }> + @Html.DisplayTextFor(i => item.Miles) + @Html.Partial("LogsSummary", item.LogPairs) + + @Html.DisplayTextFor(i => item.GasPurchased) +
Total:@Html.DisplayTextFor(m => m.TotalMiles)@Html.DisplayTextFor(m => m.TotalGasPurchased)
diff --git a/Web/Views/Shared/DisplayTemplates/DateTime.cshtml b/Web/Views/Shared/DisplayTemplates/DateTime.cshtml new file mode 100644 index 0000000..2d05905 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/DateTime.cshtml @@ -0,0 +1,5 @@ +@model DateTime +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(string.Format(ViewData.ModelMetadata.DisplayFormatString, Model)) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/Decimal.cshtml b/Web/Views/Shared/DisplayTemplates/Decimal.cshtml new file mode 100644 index 0000000..e067346 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/Decimal.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml b/Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml new file mode 100644 index 0000000..e067346 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/HiddenInput.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml b/Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml new file mode 100644 index 0000000..6dad5a3 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/MileageLogTypeWrapper.cshtml @@ -0,0 +1,7 @@ +@using MileageTraker.Web.Models +@using MileageTraker.Web.Utility +@model MileageLogTypeWrapper +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model.Enum.GetDisplayName()) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/Object.cshtml b/Web/Views/Shared/DisplayTemplates/Object.cshtml new file mode 100644 index 0000000..b8d84ef --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/Object.cshtml @@ -0,0 +1,8 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; +} +@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !pm.HideSurroundingHtml && !pm.ModelType.IsCollection())) +{ + @Html.Display(prop.PropertyName) +} \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/String.cshtml b/Web/Views/Shared/DisplayTemplates/String.cshtml new file mode 100644 index 0000000..e067346 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/String.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/DisplayTemplates/_FieldLayout.cshtml"; +} +@Html.Encode(Model) \ No newline at end of file diff --git a/Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml b/Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml new file mode 100644 index 0000000..5bffb71 --- /dev/null +++ b/Web/Views/Shared/DisplayTemplates/_FieldLayout.cshtml @@ -0,0 +1,20 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; + var lowerPropertyName = @CustomExtensions.LowercaseFirst(ViewData.ModelMetadata.PropertyName); + var units = (string)ViewData.ModelMetadata.AdditionalValues["Units"]; + var color = ViewData.ModelMetadata.PropertyName == "Color" ? Model : ""; +} + +
+
+ @Html.LabelForModel() +
+
+ @RenderBody() + @if (!string.IsNullOrEmpty(units)) + { + @units + } +
+
\ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/DateTime.cshtml b/Web/Views/Shared/EditorTemplates/DateTime.cshtml new file mode 100644 index 0000000..eedfc77 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/DateTime.cshtml @@ -0,0 +1,5 @@ +@model DateTime +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@Html.TextBox("", (Model != DateTime.MinValue ? Model.ToShortDateString() : string.Empty )) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Decimal.cshtml b/Web/Views/Shared/EditorTemplates/Decimal.cshtml new file mode 100644 index 0000000..91e51be --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Decimal.cshtml @@ -0,0 +1,4 @@ +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Enum.cshtml b/Web/Views/Shared/EditorTemplates/Enum.cshtml new file mode 100644 index 0000000..68a1dd6 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Enum.cshtml @@ -0,0 +1,18 @@ +@using MileageTraker.Web.Utility +@model Enum +@{ + var listItems = Model.GetSelectListItems(); + var prefix = ViewData.TemplateInfo.HtmlFieldPrefix; + ViewData.TemplateInfo.HtmlFieldPrefix = string.Empty; + var index = 0; + + foreach (var li in listItems) + { + var fieldName = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}_{1}", prefix.Replace('.', '_'), index++); + + @Html.RadioButton(prefix, li.Value, li.Selected, new { @id = fieldName }) + @Html.Label(fieldName, li.Text) + + } + ViewData.TemplateInfo.HtmlFieldPrefix = prefix; +} \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Enum_Select.cshtml b/Web/Views/Shared/EditorTemplates/Enum_Select.cshtml new file mode 100644 index 0000000..49dfc43 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Enum_Select.cshtml @@ -0,0 +1,7 @@ +@using MileageTraker.Web.Utility +@model Enum +@{ + var emptyItem = new SelectListItem{Text="Type", Value=""}; + var listItems = new []{emptyItem}.Concat(Model.GetSelectListItems()); + @Html.ListBox("", listItems) +} diff --git a/Web/Views/Shared/EditorTemplates/HiddenInput.cshtml b/Web/Views/Shared/EditorTemplates/HiddenInput.cshtml new file mode 100644 index 0000000..419abec --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/HiddenInput.cshtml @@ -0,0 +1 @@ +@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml b/Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml new file mode 100644 index 0000000..9424b14 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/LogResultsViewModel.cshtml @@ -0,0 +1,7 @@ +@using MileageTraker.Web.Models +@using MileageTraker.Web.Utility +@model MileageTraker.Web.ViewModels.LogResultsViewModel + +@Html.DropDownList("Year", new SelectList(Model.Years, Model.SelectedYear)) +@Html.DropDownList("Month", new SelectList(Model.Months, Model.SelectedMonth)) +@Html.DropDownList("LogType", typeof(MileageLogType).ToSelectList(Model.SelectedLogType, "Log Type")) \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml b/Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml new file mode 100644 index 0000000..ad729a7 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/MileageLogTypeWrapper.cshtml @@ -0,0 +1,6 @@ +@using MileageTraker.Web.Models +@model MileageLogTypeWrapper +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@Html.EditorFor(model => model.Enum, "Enum") \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/Object.cshtml b/Web/Views/Shared/EditorTemplates/Object.cshtml new file mode 100644 index 0000000..e4b42a3 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/Object.cshtml @@ -0,0 +1,8 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; +} +@foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.ModelType.IsCollection())) +{ + @Html.Editor(prop.PropertyName) +} \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/String.cshtml b/Web/Views/Shared/EditorTemplates/String.cshtml new file mode 100644 index 0000000..5807540 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/String.cshtml @@ -0,0 +1,11 @@ +@{ + Layout = "~/Views/Shared/EditorTemplates/_FieldLayout.cshtml"; +} +@if (!(Model is Enum)) +{ + @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue) +} +else +{ + @Html.Editor("", "Enum") +} \ No newline at end of file diff --git a/Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml b/Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml new file mode 100644 index 0000000..2131789 --- /dev/null +++ b/Web/Views/Shared/EditorTemplates/_FieldLayout.cshtml @@ -0,0 +1,26 @@ +@using MileageTraker.Web.Utility +@{ + Layout = null; + var lowerPropertyName = @CustomExtensions.LowercaseFirst(ViewData.ModelMetadata.PropertyName); + var units = (string)ViewData.ModelMetadata.AdditionalValues["Units"]; + var formatHint = (string)ViewData.ModelMetadata.AdditionalValues["FormatHint"]; + var editLabel = (bool)ViewData.ModelMetadata.AdditionalValues["EditLabel"]; +} + +
+ @if (editLabel) { +
+ @Html.LabelForModel() +
+ } +
+ @RenderBody() + @if (!string.IsNullOrEmpty(units)) { + @units + } + @if (!string.IsNullOrEmpty(formatHint)) { +
@formatHint
+ } + @Html.ValidationMessage("") +
+
diff --git a/Web/Views/Shared/Error.cshtml b/Web/Views/Shared/Error.cshtml new file mode 100644 index 0000000..d3bcd71 --- /dev/null +++ b/Web/Views/Shared/Error.cshtml @@ -0,0 +1,13 @@ +@model HandleErrorInfo + +@{ + ViewBag.Title = "Error"; + if (Model.ControllerName == "CreateLog") + { + Layout = "~/Views/Shared/_Layout.min.cshtml"; + } +} + +

+ Sorry, an error occurred while processing your request. +

diff --git a/Web/Views/Shared/_Layout.cshtml b/Web/Views/Shared/_Layout.cshtml new file mode 100644 index 0000000..b62ce80 --- /dev/null +++ b/Web/Views/Shared/_Layout.cshtml @@ -0,0 +1,36 @@ + + + + Mileage Traker - ETHRA - @ViewBag.Title + + + @RenderSection("Styles", false) + + + + + + +
+ +
+ @RenderBody() +
+ +
+ + diff --git a/Web/Views/Shared/_Layout.min.cshtml b/Web/Views/Shared/_Layout.min.cshtml new file mode 100644 index 0000000..de748ce --- /dev/null +++ b/Web/Views/Shared/_Layout.min.cshtml @@ -0,0 +1,38 @@ +@using MileageTraker.Web.Utility + + + + Mileage Traker - ETHRA - @ViewBag.Title + + + @if (Request.IsBlackBerry()) + { + + } + else + { + + } + @if (ViewBag.PageStyle != null) + { + + } + + + @if (!Request.IsBlackBerry()) + { + + + } + + + + @if (!Request.IsBlackBerry()) + { + + } + @RenderBody() + + diff --git a/Web/Views/Vehicle/Create.cshtml b/Web/Views/Vehicle/Create.cshtml new file mode 100644 index 0000000..e538d78 --- /dev/null +++ b/Web/Views/Vehicle/Create.cshtml @@ -0,0 +1,26 @@ +@model MileageTraker.Web.Models.Vehicle + +@{ + ViewBag.Title = "Create Vehicle"; +} + +

@ViewBag.Title

+ + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
+ Vehicle + @Html.EditorForModel() + +

+ +

+
+} + +

+ @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

diff --git a/Web/Views/Vehicle/Details.cshtml b/Web/Views/Vehicle/Details.cshtml new file mode 100644 index 0000000..2caf211 --- /dev/null +++ b/Web/Views/Vehicle/Details.cshtml @@ -0,0 +1,20 @@ +@model MileageTraker.Web.Models.Vehicle + +@{ + ViewBag.Title = "Vehicle Details"; +} + +@section Styles { + +} + +

@ViewBag.Title

+ +
+ Vehicle + @Html.DisplayForModel() +
+

+ @Html.ActionLink("Edit", "Edit", new { id = Model.VehicleId }, new { @class = "ui-button" }) + @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

diff --git a/Web/Views/Vehicle/DetailsPartial.cshtml b/Web/Views/Vehicle/DetailsPartial.cshtml new file mode 100644 index 0000000..e7f1dbd --- /dev/null +++ b/Web/Views/Vehicle/DetailsPartial.cshtml @@ -0,0 +1,8 @@ +@model MileageTraker.Web.ViewModels.VehiclePartialDetails +@{ + Layout = null; +} +@Html.DisplayForModel() +

+@Html.ActionLink("Details", "Details", new { id = Model.VehicleId }) +

\ No newline at end of file diff --git a/Web/Views/Vehicle/Edit.cshtml b/Web/Views/Vehicle/Edit.cshtml new file mode 100644 index 0000000..ca2ca3c --- /dev/null +++ b/Web/Views/Vehicle/Edit.cshtml @@ -0,0 +1,26 @@ +@model MileageTraker.Web.Models.Vehicle + +@{ + ViewBag.Title = "Edit Vehicle"; +} + +

@ViewBag.Title

+ + + + +@using (Html.BeginForm()) { + @Html.ValidationSummary(true) +
+ Vehicle + @Html.EditorForModel() + +

+ +

+
+} + +

+ @Html.ActionLink("Back to List", "Index", null, new { @class = "ui-button" }) +

diff --git a/Web/Views/Vehicle/Index.cshtml b/Web/Views/Vehicle/Index.cshtml new file mode 100644 index 0000000..7b79979 --- /dev/null +++ b/Web/Views/Vehicle/Index.cshtml @@ -0,0 +1,94 @@ +@model IEnumerable + +@{ + ViewBag.Title = "Vehicles"; +} + +@section Styles { + +} + +

@ViewBag.Title

+ +

+ @Html.ActionLink("Add another vehicle", "Create", null, new{@class="ui-button"}) + @Html.ActionLink("Export", "Export", null, new { @class = "ui-button" }) +

+ + + + + + + + + + + + + + + +@foreach (var item in Model) { + + + + + + + + + + + + + + + +} + +
+ Key + + EthraId + + Model Yr + + Make + + Model + + Type + + TagNumber + + Prog + + Assigned + + ODO +
+ @Html.DisplayTextFor(m => item.Key) + + @Html.DisplayTextFor(m => item.VehicleId) + + @Html.DisplayTextFor(m => item.ModelYear) + + @Html.DisplayTextFor(m => item.Make) + + @Html.DisplayTextFor(m => item.CarModel) + + @Html.DisplayTextFor(m => item.Type) + + @Html.DisplayTextFor(m => item.TagNumber) + + @Html.DisplayTextFor(m => item.Prog) + + @Html.DisplayTextFor(m => item.Assigned) @if(!string.IsNullOrEmpty(item.Notes)) { + @Html.DisplayTextFor(m => item.Notes) + } + + @Html.DisplayTextFor(m => item.CurrentOdometer) + + @Html.ActionLink("Edit", "Edit", new { id=item.VehicleId }) @Html.ActionLink("Details", "Details", new { id=item.VehicleId }) @Html.ActionLink("New log", "Create", "Log", new { vehicleId = item.VehicleId }, null) +
diff --git a/Web/Views/Web.config b/Web/Views/Web.config new file mode 100644 index 0000000..a4def2a --- /dev/null +++ b/Web/Views/Web.config @@ -0,0 +1,58 @@ + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Web/Views/_ViewStart.cshtml b/Web/Views/_ViewStart.cshtml new file mode 100644 index 0000000..efda124 --- /dev/null +++ b/Web/Views/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "~/Views/Shared/_Layout.cshtml"; +} \ No newline at end of file diff --git a/Web/Web.Debug.config b/Web/Web.Debug.config new file mode 100644 index 0000000..2c6dd51 --- /dev/null +++ b/Web/Web.Debug.config @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.Publish.xml b/Web/Web.Publish.xml new file mode 100644 index 0000000..acff0c4 --- /dev/null +++ b/Web/Web.Publish.xml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.Release.config b/Web/Web.Release.config new file mode 100644 index 0000000..4122d79 --- /dev/null +++ b/Web/Web.Release.config @@ -0,0 +1,31 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.config b/Web/Web.config new file mode 100644 index 0000000..6e852da --- /dev/null +++ b/Web/Web.config @@ -0,0 +1,72 @@ + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Web/Web.csproj b/Web/Web.csproj new file mode 100644 index 0000000..985b465 --- /dev/null +++ b/Web/Web.csproj @@ -0,0 +1,397 @@ + + + + + Debug + AnyCPU + + + 2.0 + {36D4C321-E918-460F-B348-16A805F88884} + {E53F8FEA-EAE0-44A6-8774-FFD645390401};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + MileageTraker.Web + MileageTraker + v4.0 + false + false + + + + + 4.0 + + + true + full + false + bin\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\ + TRACE + prompt + 4 + + + + False + ..\packages\AutoMapper.2.1.267\lib\net40\AutoMapper.dll + + + False + ..\packages\EntityFramework.4.3.1\lib\net40\EntityFramework.dll + + + ..\packages\ExcelLibrary.1.2011.7.30\lib\ExcelLibrary.dll + + + False + ..\packages\log4net.2.0.0\lib\net40-full\log4net.dll + + + + ..\packages\morelinq.1.0\lib\net35\MoreLinq.dll + + + + + + + + + + + + + + True + + + + + + + + + + 201204181847082_InitialMigration.cs + + + + + + + + + + + + + + + + + + + + + + + Global.asax + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Designer + + + Web.config + + + Web.config + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + + + + False + True + 2977 + / + + + False + False + + + False + + + + + \ No newline at end of file diff --git a/Web/favicon.ico b/Web/favicon.ico new file mode 100644 index 0000000..8f0c56f Binary files /dev/null and b/Web/favicon.ico differ diff --git a/Web/packages.config b/Web/packages.config new file mode 100644 index 0000000..2283a1b --- /dev/null +++ b/Web/packages.config @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/AutoMapper.2.1.267/AutoMapper.2.1.267.nupkg b/packages/AutoMapper.2.1.267/AutoMapper.2.1.267.nupkg new file mode 100644 index 0000000..d3510e2 Binary files /dev/null and b/packages/AutoMapper.2.1.267/AutoMapper.2.1.267.nupkg differ diff --git a/packages/AutoMapper.2.1.267/lib/net40/AutoMapper.dll b/packages/AutoMapper.2.1.267/lib/net40/AutoMapper.dll new file mode 100644 index 0000000..99bdd38 Binary files /dev/null and b/packages/AutoMapper.2.1.267/lib/net40/AutoMapper.dll differ diff --git a/packages/AutoMapper.2.1.267/lib/net40/AutoMapper.xml b/packages/AutoMapper.2.1.267/lib/net40/AutoMapper.xml new file mode 100644 index 0000000..a5c9820 --- /dev/null +++ b/packages/AutoMapper.2.1.267/lib/net40/AutoMapper.xml @@ -0,0 +1,15 @@ + + + + AutoMapper + + + + + This expression visitor will replace an input parameter by another one + + see http://stackoverflow.com/questions/4601844/expression-tree-copy-or-convert + + + + diff --git a/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML new file mode 100644 index 0000000..3b6bdcc --- /dev/null +++ b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.XML @@ -0,0 +1,671 @@ + + + + AutoMapper + + + + + This expression visitor will replace an input parameter by another one + + see http://stackoverflow.com/questions/4601844/expression-tree-copy-or-convert + + + + + Search key structure for + + Type of the key. + Type of the value. + + + + A Concurrent implementation. + + Type of the keys. + Type of the values. + + This class is threadsafe and highly concurrent. This means that multiple threads can do lookup and insert operations + on this dictionary simultaneously. + It is not guaranteed that collisions will not occur. The dictionary is partitioned in segments. A segment contains + a set of items based on a hash of those items. The more segments there are and the beter the hash, the fewer collisions will occur. + This means that a nearly empty ConcurrentDictionary is not as concurrent as one containing many items. + + + + + Base class for concurrent hashtable implementations + + Type of the items stored in the hashtable. + Type of the key to search with. + + + + Constructor (protected) + + Use Initialize method after construction. + + + + Initialize the newly created ConcurrentHashtable. Invoke in final (sealed) constructor + or Create method. + + + + + Create a segment range + + Number of segments in range. + Number of slots allocated initialy in each segment. + The created instance. + + + + While adjusting the segmentation, _NewRange will hold a reference to the new range of segments. + when the adjustment is complete this reference will be copied to _CurrentRange. + + + + + Will hold the most current reange of segments. When busy adjusting the segmentation, this + field will hold a reference to the old range. + + + + + While adjusting the segmentation this field will hold a boundary. + Clients accessing items with a key hash value below this boundary (unsigned compared) + will access _NewRange. The others will access _CurrentRange + + + + + Get a hashcode for given storeable item. + + Reference to the item to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Get a hashcode for given search key. + + Reference to the key to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Compares a storeable item to a search key. Should return true if they match. + + Reference to the storeable item to compare. + Reference to the search key to compare. + True if the storeable item and search key match; false otherwise. + + + + Compares two storeable items for equality. + + Reference to the first storeable item to compare. + Reference to the second storeable item to compare. + True if the two soreable items should be regarded as equal. + + + + Indicates if a specific item reference contains a valid item. + + The storeable item reference to check. + True if the reference doesn't refer to a valid item; false otherwise. + The statement IsEmpty(default(TStoredI)) should always be true. + + + + Returns the type of the key value or object. + + The stored item to get the type of the key for. + The actual type of the key or null if it can not be determined. + + Used for diagnostics purposes. + + + + + Gets a segment out of either _NewRange or _CurrentRange based on the hash value. + + + + + + + Gets a LOCKED segment out of either _NewRange or _CurrentRange based on the hash value. + Unlock needs to be called on this segment before it can be used by other clients. + + + + + + + Gets a LOCKED segment out of either _NewRange or _CurrentRange based on the hash value. + Unlock needs to be called on this segment before it can be used by other clients. + + + + + + + Finds an item in the table collection that maches the given searchKey + + The key to the item. + Out reference to a field that will receive the found item. + A boolean that will be true if an item has been found and false otherwise. + + + + Looks for an existing item in the table contents using an alternative copy. If it can be found it will be returned. + If not then the alternative copy will be added to the table contents and the alternative copy will be returned. + + A copy to search an already existing instance with + Out reference to receive the found item or the alternative copy + A boolean that will be true if an existing copy was found and false otherwise. + + + + Replaces and existing item + + + + + true is the existing item was successfully replaced. + + + + Inserts an item in the table contents possibly replacing an existing item. + + The item to insert in the table + Out reference to a field that will receive any possibly replaced item. + A boolean that will be true if an existing copy was found and replaced and false otherwise. + + + + Removes an item from the table contents. + + The key to find the item with. + Out reference to a field that will receive the found and removed item. + A boolean that will be rue if an item was found and removed and false otherwise. + + + + Enumerates all segments in _CurrentRange and locking them before yielding them and resleasing the lock afterwards + The order in which the segments are returned is undefined. + Lock SyncRoot before using this enumerable. + + + + + + Removes all items from the collection. + Aquires a lock on SyncRoot before it does it's thing. + When this method returns and multiple threads have access to this table it + is not guaranteed that the table is actually empty. + + + + + Determines if a segmentation adjustment is needed. + + True + + + + Bool as int (for interlocked functions) that is true if a Segmentation assesment is pending. + + + + + The total allocated number of item slots. Filled with nonempty items or not. + + + + + When a segment resizes it uses this method to inform the hashtable of the change in allocated space. + + + + + + Schedule a call to the AssessSegmentation() method. + + + + + Checks if segmentation needs to be adjusted and if so performs the adjustment. + + + + + + This method is called when a re-segmentation is expected to be needed. It checks if it actually is needed and, if so, performs the re-segementation. + + + + + Adjusts the segmentation to the new segment count + + The new number of segments to use. This must be a power of 2. + The number of item slots to reserve in each segment. + + + + Returns an object that serves as a lock for range operations + + + Clients use this primarily for enumerating over the Tables contents. + Locking doesn't guarantee that the contents don't change, but prevents operations that would + disrupt the enumeration process. + Operations that use this lock: + Count, Clear, DisposeGarbage and AssessSegmentation. + Keeping this lock will prevent the table from re-segmenting. + + + + + Gets an IEnumerable to iterate over all items in all segments. + + + + A lock should be aquired and held on SyncRoot while this IEnumerable is being used. + The order in which the items are returned is undetermined. + + + + + Returns a count of all items in teh collection. This may not be + aqurate when multiple threads are accessing this table. + Aquires a lock on SyncRoot before it does it's thing. + + + + + Gives the minimum number of segments a hashtable can contain. This should be 1 or more and always a power of 2. + + + + + Gives the minimum number of allocated item slots per segment. This should be 1 or more, always a power of 2 + and less than 1/2 of MeanSegmentAllocatedSpace. + + + + + Gives the prefered number of allocated item slots per segment. This should be 4 or more and always a power of 2. + + + + + Constructs a instance using the default to compare keys. + + + + + Constructs a instance using the specified to compare keys. + + The tp compare keys with. + is null. + + + + Get a hashcode for given storeable item. + + Reference to the item to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Get a hashcode for given search key. + + Reference to the key to get a hash value for. + The hash value as an . + + The hash returned should be properly randomized hash. The standard GetItemHashCode methods are usually not good enough. + A storeable item and a matching search key should return the same hash code. + So the statement ItemEqualsItem(storeableItem, searchKey) ? GetItemHashCode(storeableItem) == GetItemHashCode(searchKey) : true should always be true; + + + + + Compares a storeable item to a search key. Should return true if they match. + + Reference to the storeable item to compare. + Reference to the search key to compare. + True if the storeable item and search key match; false otherwise. + + + + Compares two storeable items for equality. + + Reference to the first storeable item to compare. + Reference to the second storeable item to compare. + True if the two soreable items should be regarded as equal. + + + + Indicates if a specific item reference contains a valid item. + + The storeable item reference to check. + True if the reference doesn't refer to a valid item; false otherwise. + The statement IsEmpty(default(TStoredI)) should always be true. + + + + Adds an element with the provided key and value to the dictionary. + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + An element with the same key already exists in the dictionary. + + + + Determines whether the dictionary + contains an element with the specified key. + + The key to locate in the dictionary. + true if the dictionary contains + an element with the key; otherwise, false. + + + + Removes the element with the specified key from the dictionary. + + The key of the element to remove. + true if the element is successfully removed; otherwise, false. This method + also returns false if key was not found in the original dictionary. + + + + Gets the value associated with the specified key. + + The key whose value to get. + + When this method returns, the value associated with the specified key, if + the key is found; otherwise, the default value for the type of the value + parameter. This parameter is passed uninitialized. + + + true if the dictionary contains an element with the specified key; otherwise, false. + + + + + Adds an association to the dictionary. + + A that represents the association to add. + An association with an equal key already exists in the dicitonary. + + + + Removes all items from the dictionary. + + WHen working with multiple threads, that each can add items to this dictionary, it is not guaranteed that the dictionary will be empty when this method returns. + + + + Determines whether the specified association exists in the dictionary. + + The key-value association to search fo in the dicionary. + True if item is found in the dictionary; otherwise, false. + + This method compares both key and value. It uses the default equality comparer to compare values. + + + + + Copies all associations of the dictionary to an + , starting at a particular index. + + The one-dimensional that is the destination of the associations + copied from . The must + have zero-based indexing. + The zero-based index in at which copying begins. + is null. + is less than 0. + is equal to or greater than the length of . + The number of associations to be copied + is greater than the available space from to the end of the destination + . + + + + Removes the specified association from the , comparing both key and value. + + A representing the association to remove. + true if the association was successfully removed from the ; + otherwise, false. This method also returns false if the association is not found in + the original . + + + + + Returns an enumerator that iterates through all associations in the at the moment of invocation. + + A that can be used to iterate through the associations. + + + + Returns an enumerator that iterates through all associations in the at the moment of invocation. + + A that can be used to iterate through the associations. + + + + Gives the of TKey that is used to compare keys. + + + + + Gets an containing the keys of + the dictionary. + + An containing the keys of the dictionary. + This property takes a snapshot of the current keys collection of the dictionary at the moment of invocation. + + + + Gets an containing the values in + the dictionary. + + + An containing the values in the dictionary. + + This property takes a snapshot of the current keys collection of the dictionary at the moment of invocation. + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get operation throws a KeyNotFoundException, and a set operation creates a new element with the specified key. + + When working with multiple threads, that can each potentialy remove the searched for item, a can always be expected. + + + + + Gets the number of elements contained in the . + + + + + Gets a value indicating whether the is read-only, which is always false. + + + + + A 'single writer - multi reader' threaded segment in a hashtable. + + + + + Though each segment can be accessed by 1 writer thread simultaneously, the hashtable becomes concurrent + for writing by containing many segments so that collisions are rare. The table will be fully concurrent + for read operations as far as they are not colliding with write operations. + Each segment is itself a small hashtable that can grow and shrink individualy. This prevents blocking of + the entire hashtable when growing or shrinking is needed. Because each segment is relatively small (depending on + the quality of the hash) resizing of the individual segments should not take much time. + + + + + Initialize the segment. + + + + + + When segment gets introduced into hashtable then its allocated space should be added to the + total allocated space. + Single threaded access or locking is needed + + + + + + When segment gets removed from hashtable then its allocated space should be subtracted to the + total allocated space. + Single threaded access or locking is needed + + + + + + Array with 'slots'. Each slot can be filled or empty. + + + + + Inserts an item into a *not empty* spot given by position i. It moves items forward until an empty spot is found. + + + + + + + + + Find item in segment. + + Reference to the search key to use. + Out reference to store the found item in. + Object that tells this segment how to treat items and keys. + True if an item could be found, otherwise false. + + + + Find an existing item or, if it can't be found, insert a new item. + + Reference to the item that will be inserted if an existing item can't be found. It will also be used to search with. + Out reference to store the found item or, if it can not be found, the new inserted item. + Object that tells this segment how to treat items and keys. + True if an existing item could be found, otherwise false. + + + + Inserts an item in the segment, possibly replacing an equal existing item. + + A reference to the item to insert. + An out reference where any replaced item will be written to, if no item was replaced the new item will be written to this reference. + Object that tells this segment how to treat items and keys. + True if an existing item could be found and is replaced, otherwise false. + + + + Removes an item from the segment. + + A reference to the key to search with. + An out reference where the removed item will be stored or default() if no item to remove can be found. + Object that tells this segment how to treat items and keys. + True if an item could be found and is removed, false otherwise. + + + + Iterate over items in the segment. + + Position beyond which the next filled slot will be found and the item in that slot returned. (Starting with -1) + Out reference where the next item will be stored or default if the end of the segment is reached. + Object that tells this segment how to treat items and keys. + The index position the next item has been found or -1 otherwise. + + + + Total numer of filled slots in _List. + + + + + Remove any excess allocated space + + + + + + Boolean value indicating if this segment has not been trashed yet. + + + + + Tiny spin lock that allows multiple readers simultanously and 1 writer exclusively + + + + + Release a reader lock + + + + + Release a writer lock + + + + + Aquire a reader lock. Wait until lock is aquired. + + + + + Aquire a reader lock. + + True if to wait until lock aquired, False to return immediately. + Boolean indicating if lock was successfuly aquired. + + + + Aquire a writer lock. Wait until lock is aquired. + + + + + Aquire a writer lock. + + True if to wait until lock aquired, False to return immediately. + Boolean indicating if lock was successfuly aquired. + + + + Attempts to replicate the Desktop CLR. + + + + diff --git a/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.dll b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.dll new file mode 100644 index 0000000..c9d814f Binary files /dev/null and b/packages/AutoMapper.2.1.267/lib/sl4/AutoMapper.dll differ diff --git a/packages/EntityFramework.4.3.1/Content/App.config.transform b/packages/EntityFramework.4.3.1/Content/App.config.transform new file mode 100644 index 0000000..4fa1b95 --- /dev/null +++ b/packages/EntityFramework.4.3.1/Content/App.config.transform @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/EntityFramework.4.3.1/Content/Web.config.transform b/packages/EntityFramework.4.3.1/Content/Web.config.transform new file mode 100644 index 0000000..4fa1b95 --- /dev/null +++ b/packages/EntityFramework.4.3.1/Content/Web.config.transform @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/EntityFramework.4.3.1/EntityFramework.4.3.1.nupkg b/packages/EntityFramework.4.3.1/EntityFramework.4.3.1.nupkg new file mode 100644 index 0000000..d6a86e1 Binary files /dev/null and b/packages/EntityFramework.4.3.1/EntityFramework.4.3.1.nupkg differ diff --git a/packages/EntityFramework.4.3.1/lib/net40/EntityFramework.dll b/packages/EntityFramework.4.3.1/lib/net40/EntityFramework.dll new file mode 100644 index 0000000..bee560a Binary files /dev/null and b/packages/EntityFramework.4.3.1/lib/net40/EntityFramework.dll differ diff --git a/packages/EntityFramework.4.3.1/lib/net40/EntityFramework.xml b/packages/EntityFramework.4.3.1/lib/net40/EntityFramework.xml new file mode 100644 index 0000000..9434eb5 --- /dev/null +++ b/packages/EntityFramework.4.3.1/lib/net40/EntityFramework.xml @@ -0,0 +1,17551 @@ + + + + EntityFramework + + + + + Convention to set precision to 18 and scale to 2 for decimal properties. + + + + + Identifies conventions that can be removed from a instance. + + + Note that implementations of this interface must be immutable. + + + + + Convention to process instances of found on properties in the model. + + + + + Base class for conventions that process CLR attributes found in the model. + + The type of member to look for. + The type of the configuration to look for. + The type of the attribute to look for. + + + + Convention to process instances of found on properties in the model. + + + + + Configures a many:many relationship. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the foreign key column(s) and table used to store the relationship. + + Action that configures the foreign key column(s) and table. + + + + Validator used to validate a property of a given EDM ComplexType. + + + This is a composite validator. + + + + + Validator used to validate an entity of a given EDM Type. + + + This is a composite validator for an EDM Type. + + + + + Creates an instance for a given EDM type. + + Property validators. + Type level validators. + + + + Validates an instance. + + Entity validation context. Must not be null. + The entry for the complex property. Null if validating an entity. + instance. Never null. + + Protected so it doesn't appear on EntityValidator. + + + + + Validates type properties. Any validation errors will be added to + collection. + + + Validation context. Must not be null. + + + Collection of validation errors. Any validation errors will be added to it. + + The entry for the complex property. Null if validating an entity. + + Note that will be modified by this method. Errors should be only added, + never removed or changed. Taking a collection as a modifiable parameter saves a couple of memory allocations + and a merge of validation error lists per entity. + + + + + Returns a validator for a child property. + + Name of the child property for which to return a validator. + + Validator for a child property. Possibly null if there are no validators for requested property. + + + + + Creates an instance for a given EDM complex type. + + Property validators. + Type level validators. + + + + Validates an instance. + + Entity validation context. Must not be null. + The entry for the complex property. Null if validating an entity. + instance. Never null. + + + + Validates type properties. Any validation errors will be added to + collection. + + + Validation context. Must not be null. + + + Collection of validation errors. Any validation errors will be added to it. + + The entry for the complex property. Null if validating an entity. + + Note that will be modified by this method. Errors should be only added, + never removed or changed. Taking a collection as a modifiable parameter saves a couple of memory allocations + and a merge of validation error lists per entity. + + + + + Adapted from to allow the initializer to take an input object and + to retry initialization if it has previously failed. + + + This class can only be used to initialize reference types that will not be null when + initialized. + + The type of the input. + The type of the result. + + + + Initializes a new instance of the class. + + The value factory. + + + + Gets the value, possibly by running the initializer if it has not been run before or + if all previous times it ran resulted in exceptions. + + The input to the initializer; ignored if initialization has already succeeded. + The initialized object. + + + + A wrapping query provider that performs expression transformation and then delegates + to the provider. The objects returned + are always instances of when the generic CreateQuery method is + used and are instances of when the non-generic CreateQuery method + is used. This provider is associated with non-generic objects. + + + + + A wrapping query provider that performs expression transformation and then delegates + to the provider. The objects returned are always instances + of . This provider is associated with generic objects. + + + + + Creates a provider that wraps the given provider. + + The provider to wrap. + + + + Performs expression replacement and then delegates to the wrapped provider before wrapping + the returned as a . + + + + + Performs expression replacement and then delegates to the wrapped provider before wrapping + the returned as a where T is determined + from the element type of the ObjectQuery. + + + + + By default, calls the same method on the wrapped provider. + + + + + By default, calls the same method on the wrapped provider. + + + + + Performs expression replacement and then delegates to the wrapped provider to create an + . + + + + + Wraps the given as a where T is determined + from the element type of the ObjectQuery. + + + + + Gets the internal context. + + The internal context. + + + + Creates a provider that wraps the given provider. + + The provider to wrap. + + + + Performs expression replacement and then delegates to the wrapped provider before wrapping + the returned as a . + + + + + Delegates to the wrapped provider except returns instances of . + + + + + An InternalQuery underlies every instance of DbSet and DbQuery. It acts to lazily initialize a InternalContext as well + as an ObjectQuery and EntitySet the first time that it is used. The InternalQuery also acts to expose necessary + information to other parts of the design in a controlled manner without adding a lot of internal methods and + properties to the DbSet and DbQuery classes themselves. + + The type of entity to query for. + + + + An interface implemented by . + + The type of the element. + + + + A non-generic interface implemented by that allows operations on + any query object without knowing the type to which it applies. + + + + + Creates a new query that will be backed by the given InternalContext. + + The backing context. + + + + Creates a new internal query based on the information in an existing query together with + a new underlying ObjectQuery. + + + + + Resets the query to its uninitialized state so that it will be re-lazy initialized the next + time it is used. This allows the ObjectContext backing a DbContext to be switched out. + + + + + Updates the underlying ObjectQuery with the given include path. + + The include path. + A new query containing the defined include path. + + + + Returns a new query where the entities returned will not be cached in the . + + A new query with NoTracking applied. + + + + Performs lazy initialization of the underlying ObjectContext, ObjectQuery, and EntitySet objects + so that the query can be used. + + + + + Returns a representation of the underlying query, equivalent + to ToTraceString on ObjectQuery. + + + The query string. + + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + The underlying InternalContext. + + + + + The underlying ObjectQuery. + + + + + The underlying ObjectQuery. + + + + + The LINQ query expression. + + + + + The LINQ query provider for the underlying . + + + + + The IQueryable element type. + + + + + Represents a raw SQL query against the context for entities in an entity set. + + + + + Represents a raw SQL query against the context that may be for entities in an entity set + or for some other non-entity element type. + + + + + Initializes a new instance of the class. + + The SQL. + The parameters. + + + + If the query is would track entities, then this method returns a new query that will + not track entities. + + A no-tracking query. + + + + Executes the query and returns an enumerator for the results. + + The query results. + + + + Throws an exception indicating that binding directly to a store query is not supported. + + + Never returns; always throws. + + + + + Returns a that contains the SQL string that was set + when the query was created. The parameters are not included. + + + A that represents this instance. + + + + + Gets the SQL query string, + + The SQL query. + + + + Gets the parameters. + + The parameters. + + + + Returns false. + + false. + + + + Initializes a new instance of the class. + + The set. + The SQL. + if set to true then the entities will not be tracked. + The parameters. + + + + If the query is would track entities, then this method returns a new query that will + not track entities. + + A no-tracking query. + + + + Executes the query and returns an enumerator for the results. + + The query results. + + + + Gets a value indicating whether this instance is set to track entities or not. + + + true if this instance is no-tracking; otherwise, false. + + + + + IInternalConnection objects manage DbConnections. + Two concrete implementations of this interface exist--LazyInternalConnection and EagerInternalConnection. + + + + + Creates an from metadata in the connection. This method must + only be called if ConnectionHasModel returns true. + + The newly created context. + + + + Returns the underlying DbConnection. + + + + + Returns a key consisting of the connection type and connection string. + If this is an EntityConnection then the metadata path is included in the key returned. + + + + + Gets a value indicating whether the connection is an EF connection which therefore contains + metadata specifying the model, or instead is a store connection, in which case it contains no + model info. + + true if the connection contains model info; otherwise, false. + + + + Returns the origin of the underlying connection string. + + + + + Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries + and connection strins. + + + + + Gets or sets the provider to be used when creating the underlying connection. + + + + + Gets the name of the underlying connection string. + + + + + Gets the original connection string. + + + + + Contains metadata about a member of an entity type or complex type. + + + + + Initializes a new instance of the class. + + The type that the property is declared on. + Type of the property. + The property name. + + + + Creates a new the runtime type of which will be + determined by the metadata. + + The entity entry to which the member belongs. + The parent property entry if the new entry is nested, otherwise null. + The new entry. + + + + Gets the type of the member for which this is metadata. + + The type of the member entry. + + + + Gets the name of the property. + + The name. + + + + Gets the type of the entity or complex object that on which the member is declared. + + The type that the member is declared on. + + + + Gets the type of element for the property, which for non-collection properties + is the same as the MemberType and which for collection properties is the type + of element contained in the collection. + + The type of the element. + + + + Gets the type of the member, which for collection properties is the type + of the collection rather than the type in the collection. + + The type of the member. + + + + Instances of this class are used to create DbConnection objects for + SQL Server Compact Edition based on a given database name or connection string. + + + It is necessary to provide the provider invariant name of the SQL Server Compact + Edition to use when creating an instance of this class. This is because different + versions of SQL Server Compact Editions use different invariant names. + An instance of this class can be set on the class to + cause all DbContexts created with no connection information or just a database + name or connection string to use SQL Server Compact Edition by default. + This class is immutable since multiple threads may access instances simultaneously + when creating connections. + + + + + Implementations of this interface are used to create DbConnection objects for + a type of database server based on a given database name. + An Instance is set on the class to + cause all DbContexts created with no connection information or just a database + name or connection string to use a certain type of database server by default. + Two implementations of this interface are provided: + is used to create connections to Microsoft SQL Server, including EXPRESS editions. + is used to create connections to Microsoft SQL + Server Compact Editions. + Other implementations for other database servers can be added as needed. + Note that implementations should be thread safe or immutable since they may + be accessed by multiple threads at the same time. + + + + + Creates a connection based on the given database name or connection string. + + The database name or connection string. + An initialized DbConnection. + + + + Creates a new connection factory with empty (default) DatabaseDirectory and BaseConnectionString + properties. + + The provider invariant name that specifies the version of SQL Server Compact Edition that should be used. + + + + Creates a new connection factory with the given DatabaseDirectory and BaseConnectionString properties. + + + The provider invariant name that specifies the version of SQL Server Compact Edition that should be used. + + + The path to prepend to the database name that will form the file name used by SQL Server Compact Edition + when it creates or reads the database file. An empty string means that SQL Server Compact Edition will use + its default for the database file location. + + + The connection string to use for options to the database other than the 'Data Source'. The Data Source will + be prepended to this string based on the database name when CreateConnection is called. + + + + + Creates a connection for SQL Server Compact Edition based on the given database name or connection string. + If the given string contains an '=' character then it is treated as a full connection string, + otherwise it is treated as a database name only. + + The database name or connection string. + An initialized DbConnection. + + + + The path to prepend to the database name that will form the file name used by + SQL Server Compact Edition when it creates or reads the database file. + The default value is "|DataDirectory|", which means the file will be placed + in the designated data directory. + + + + + The connection string to use for options to the database other than the 'Data Source'. + The Data Source will be prepended to this string based on the database name when + CreateConnection is called. + The default is the empty string, which means no other options will be used. + + + + + The provider invariant name that specifies the version of SQL Server Compact Edition + that should be used. + + + + + Instances of this class are used internally to create constant expressions for + that are inserted into the expression tree to replace references to + and . + + The type of the element. + + + + Private constructor called by the Create factory method. + + The query. + + + + Factory method called by CreateDelegate to create an instance of this class. + + The query, which must be a generic object of the expected type. + A new instance. + + + + The public property expected in the LINQ expression tree. + + The query. + + + + A factory for creating derived instances. Implement this + interface to enable design-time services for context types that do not have a + public default constructor. + + At design-time, derived instances can be created in order to enable specific + design-time experiences such as model rendering, DDL generation etc. To enable design-time instantiation + for derived types that do not have a public, default constructor, implement + this interface. Design-time services will auto-discover implementations of this interface that are in the + same assembly as the derived type. + + + + + + Creates a new instance of a derived type. + + An instance of TContext + + + + Edm Model Validator + + + + + validate the from the root with the context + + The root to validate from + The validation context + + + + Visitor for EdmModel Validation + + + + + Serialize the to the + + The DbDatabaseMetadata to serialize + Provider information on the Schema element + ProviderManifestToken information on the Schema element + The XmlWriter to serialize to + + + + + The base for all all Entity Data Model (EDM) item types that with a Name property that represents a qualified (can be dotted) name. + + + + + The base for all all Entity Data Model (EDM) item types that with a property. + + + + + The base for all all Entity Data Model (EDM) types that support annotation using . + + + + + EdmDataModelItem is the base for all types in the Entity Data Model (EDM) metadata construction and modification API. + + + + + DataModelItem is the base for all types in the EDM metadata reflection, construction and modification API. + + + + + Gets an value indicating which Entity Data Model (EDM) concept is represented by this item. + + + + + IAnnotatedDataModelItem is implemented by model-specific base types for all types with an property. + + + + + Gets or sets the currently assigned annotations. + + + + + Gets or sets the currently assigned annotations. + + + + + Returns all EdmItem children directly contained by this EdmItem. + + + + + INamedDataModelItem is implemented by model-specific base types for all types with a property. + + + + + Gets or sets the currently assigned name. + + + + + Gets or sets the currently assigned name. + + + + + Allows the construction and modification of a condition for a column in a database table. + + + + + DbMappingMetadataItem is the base for all types in the EDM-to-Database Mapping construction and modification API that support annotation using . + + + + + DbMappingModelItem is the base for all types in the EDM-to-Database Mapping construction and modification API. + + + + + Gets or sets the currently assigned annotations. + + + + + Gets or sets a value representing the table column which must contain for this condition to hold. + + + + + Gets or sets the value that must contain for this condition to hold. + + + + + Specifies the maximum length of array/string data allowed in a property. + + + + + Initializes a new instance of the class. + + + The maximum allowable length of array/string data. + Value must be greater than zero. + + + + + Initializes a new instance of the class. + The maximum allowable length supported by the database will be used. + + + + + Determines whether a specified object is valid. (Overrides ) + + + This method returns true if the is null. + It is assumed the is used if the value may not be null. + + The object to validate. + true if the value is null or less than or equal to the specified maximum length, otherwise false + Length is zero or less than negative one. + + + + Applies formatting to a specified error message. (Overrides ) + + The name to include in the formatted string. + A localized string to describe the maximum acceptable length. + + + + Checks that Length has a legal value. Throws InvalidOperationException if not. + + + + + Gets the maximum allowable length of the array/string data. + + + + + Decorator to provide logging during migrations operations.. + + + + + Base class for decorators that wrap the core + + + + + Initializes a new instance of the MigratorBase class. + + The migrator that this decorator is wrapping. + + + + Gets a list of the pending migrations that have not been applied to the database. + + List of migration Ids + + + + Updates the target database to the latest migration. + + + + + Updates the target database to a given migration. + + The migration to upgrade/downgrade to. + + + + Gets a list of the migrations that are defined in the assembly. + + List of migration Ids + + + + Gets a list of the migrations that have been applied to the database. + + List of migration Ids + + + + Gets the configuration being used for the migrations process. + + + + + Initializes a new instance of the MigratorLoggingDecorator class. + + The migrator that this decorator is wrapping. + The logger to write messages to. + + + + A DbContext instance represents a combination of the Unit Of Work and Repository patterns such that + it can be used to query from a database and group together changes that will then be written + back to the store as a unit. + DbContext is conceptually similar to ObjectContext. + + + DbContext is usually used with a derived type that contains properties for + the root entities of the model. These sets are automatically initialized when the + instance of the derived class is created. This behavior can be modified by applying the + attribute to either the entire derived context + class, or to individual properties on the class. + + The Entity Data Model backing the context can be specified in several ways. When using the Code First + approach, the properties on the derived context are used to build a model + by convention. The protected OnModelCreating method can be overridden to tweak this model. More + control over the model used for the Model First approach can be obtained by creating a + explicitly from a and passing this model to one of the DbContext constructors. + + When using the Database First or Model First approach the Entity Data Model can be created using the + Entity Designer (or manually through creation of an EDMX file) and then this model can be specified using + entity connection string or an object. + + The connection to the database (including the name of the database) can be specified in several ways. + If the parameterless DbContext constructor is called from a derived context, then the name of the derived context + is used to find a connection string in the app.config or web.config file. If no connection string is found, then + the name is passed to the DefaultConnectionFactory registered on the class. The connection + factory then uses the context name as the database name in a default connection string. (This default connection + string points to .\SQLEXPRESS on the local machine unless a different DefaultConnectionFactory is registered.) + + Instead of using the derived context name, the connection/database name can also be specified explicitly by + passing the name to one of the DbContext constructors that takes a string. The name can also be passed in + the form "name=myname", in which case the name must be found in the config file or an exception will be thrown. + + Note that the connection found in the app.config or web.config file can be a normal database connection + string (not a special Entity Framework connection string) in which case the DbContext will use Code First. + However, if the connection found in the config file is a special Entity Framework connection string, then the + DbContext will use Database/Model First and the model specified in the connection string will be used. + + An existing or explicitly created DbConnection can also be used instead of the database/connection name. + + A can be applied to a class derived from DbContext to set the + version of conventions used by the context when it creates a model. If no attribute is applied then the + latest version of conventions will be used. + + + + + Interface implemented by objects that can provide an instance. + The class implements this interface to provide access to the underlying + ObjectContext. + + + + + Gets the object context. + + The object context. + + + + Constructs a new context instance using conventions to create the name of the database to + which a connection will be made. The by-convention name is the full name (namespace + class name) + of the derived context class. + See the class remarks for how this is used to create a connection. + + + + + Constructs a new context instance using conventions to create the name of the database to + which a connection will be made, and initializes it from the given model. + The by-convention name is the full name (namespace + class name) of the derived context class. + See the class remarks for how this is used to create a connection. + + The model that will back this context. + + + + Constructs a new context instance using the given string as the name or connection string for the + database to which a connection will be made. + See the class remarks for how this is used to create a connection. + + Either the database name or a connection string. + + + + Constructs a new context instance using the given string as the name or connection string for the + database to which a connection will be made, and initializes it from the given model. + See the class remarks for how this is used to create a connection. + + Either the database name or a connection string. + The model that will back this context. + + + + Constructs a new context instance using the existing connection to connect to a database. + The connection will not be disposed when the context is disposed. + + An existing connection to use for the new context. + If set to true the connection is disposed when + the context is disposed, otherwise the caller must dispose the connection. + + + + Constructs a new context instance using the existing connection to connect to a database, + and initializes it from the given model. + The connection will not be disposed when the context is disposed. + An existing connection to use for the new context. + The model that will back this context. + If set to true the connection is disposed when + the context is disposed, otherwise the caller must dispose the connection. + + + + + Constructs a new context instance around an existing ObjectContext. + An existing ObjectContext to wrap with the new context. + If set to true the ObjectContext is disposed when + the DbContext is disposed, otherwise the caller must dispose the connection. + + + + + Initializes the internal context, discovers and initializes sets, and initializes from a model if one is provided. + + + + + Discovers DbSets and initializes them. + + + + + This method is called when the model for a derived context has been initialized, but + before the model has been locked down and used to initialize the context. The default + implementation of this method does nothing, but it can be overridden in a derived class + such that the model can be further configured before it is locked down. + + + Typically, this method is called only once when the first instance of a derived context + is created. The model for that context is then cached and is for all further instances of + the context in the app domain. This caching can be disabled by setting the ModelCaching + property on the given ModelBuidler, but note that this can seriously degrade performance. + More control over caching is provided through use of the DbModelBuilder and DbContextFactory + classes directly. + + The builder that defines the model for the context being created. + + + + Internal method used to make the call to the real OnModelCreating method. + + The model builder. + + + + Returns a DbSet instance for access to entities of the given type in the context, + the ObjectStateManager, and the underlying store. + + + See the DbSet class for more details. + + The type entity for which a set should be returned. + A set for the given entity type. + + + + Returns a non-generic DbSet instance for access to entities of the given type in the context, + the ObjectStateManager, and the underlying store. + + The type of entity for which a set should be returned. + A set for the given entity type. + + See the DbSet class for more details. + + + + + Saves all changes made in this context to the underlying database. + + The number of objects written to the underlying database. + Thrown if the context has been disposed. + + + + Validates tracked entities and returns a Collection of containing validation results. + + + Collection of validation results for invalid entities. The collection is never null and must not contain null + values or results for valid entities. + + + 1. This method calls DetectChanges() to determine states of the tracked entities unless + DbContextConfiguration.AutoDetectChangesEnabled is set to false. + 2. By default only Added on Modified entities are validated. The user is able to change this behavior + by overriding ShouldValidateEntity method. + + + + + Extension point allowing the user to override the default behavior of validating only + added and modified entities. + + DbEntityEntry instance that is supposed to be validated. + true to proceed with validation. false otherwise. + + + + Extension point allowing the user to customize validation of an entity or filter out validation results. + Called by . + + DbEntityEntry instance to be validated. + User defined dictionary containing additional info for custom validation. + It will be passed to + and will be exposed as . + This parameter is optional and can be null. + Entity validation result. Possibly null when overridden. + + + + Internal method that calls the protected ValidateEntity method. + + DbEntityEntry instance to be validated. + User defined dictionary containing additional info for custom validation. + It will be passed to + and will be exposed as . + This parameter is optional and can be null. + Entity validation result. Possibly null when ValidateEntity is overridden. + + + + Gets a object for the given entity providing access to + information about the entity and the ability to perform actions on the entity. + + The type of the entity. + The entity. + An entry for the entity. + + + + Gets a object for the given entity providing access to + information about the entity and the ability to perform actions on the entity. + + The entity. + An entry for the entity. + + + + Calls the protected Dispose method. + + + + + Disposes the context. The underlying is also disposed if it was created + is by this context or ownership was passed to this context when this context was created. + The connection to the database ( object) is also disposed if it was created + is by this context or ownership was passed to this context when this context was created. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Creates a Database instance for this context that allows for creation/deletion/existence checks + for the underlying database. + + + + + Returns the Entity Framework ObjectContext that is underlying this context. + + Thrown if the context has been disposed. + + + + Provides access to features of the context that deal with change tracking of entities. + + An object used to access features that deal with change tracking. + + + + Provides access to configuration options for the context. + + An object used to access configuration options. + + + + Provides access to the underlying InternalContext for other parts of the internal design. + + + + + Represents the configuration for a series of contexts + + + + + Adds a new context to the collection + Used for unit testing + + + + + Represents a series of parameters to pass to a method + + + + + Adds a new parameter to the collection + Used for unit testing + + + + + Convention to configure the primary key(s) of the dependent entity type as foreign key(s) in a one:one relationship. + + + + + Base class for configuring a property on an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Base class for performing configuration of a relationship. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Builds validators based on s specified on entity CLR types and properties + as well as based on presence of implementation on entity and complex + type CLR types. It's not sealed and not static for mocking purposes. + + + + + Builds an for the given . + + The entity entry to build the validator for. + Whether the currently processed type is the target type or one of the ancestor types. + + + for the given . Possibly null + if no validation has been specified for this entity type. + + + + + Builds the validator for a given and the corresponding + . + + The CLR type that corresponds to the EDM complex type. + The EDM complex type that type level validation is built for. + A for the given complex type. May be null if no validation specified. + + + + Extracted method from BuildEntityValidator and BuildComplexTypeValidator + + + + + Build validators for the and the corresponding + or . + + Properties to build validators for. + Non-navigation EDM properties. + Navigation EDM properties. + A list of validators. Possibly empty, never null. + + + + Builds a for the given and the corresponding + . If the property is a complex type, type level validators will be built here as + well. + + The CLR property to build the validator for. + The EDM property to build the validator for. + + for the given . Possibly null + if no validation has been specified for this property. + + + + + Builds a for the given transient . + + The CLR property to build the validator for. + + for the given . Possibly null + if no validation has been specified for this property. + + + + + Builds s for given that derive from + . + + Attributes used to build validators. + + A list of s built from . + Possibly empty, never null. + + + + + Returns all non-static non-indexed CLR properties from the . + + The CLR to get the properties from. + + A collection of CLR properties. Possibly empty, never null. + + + + + Builds validators based on the facets of : + * If .Nullable facet set to false adds a validator equivalent to the RequiredAttribute + * If the .MaxLength facet is specified adds a validator equivalent to the MaxLengthAttribute. + However the validator isn't added if .IsMaxLength has been set to true. + + The CLR property to build the facet validators for. + The property for which facet validators will be created + A collection of validators. + + + + Represents a SQL query for entities that is created from a + and is executed using the connection from that context. + Instances of this class are obtained from the instance for the + entity type. The query is not executed when this object is created; it is executed + each time it is enumerated, for example by using foreach. + SQL queries for non-entities are created using the . + See for a non-generic version of this class. + + + + + Executes the query and returns an enumerator for the elements. + + An + + object that can be used to iterate through the elements. + + + + Executes the query and returns an enumerator for the elements. + + + An object that can be used to iterate through the elements. + + + + + Returns a new query where the results of the query will not be tracked by the associated + . + + A new query with no-tracking applied. + + + + Returns a that contains the SQL string that was set + when the query was created. The parameters are not included. + + + A that represents this instance. + + + + + Throws an exception indicating that binding directly to a store query is not supported. + + + Never returns; always throws. + + + + + Gets the internal query. + + The internal query. + + + + Returns false. + + false. + + + + This is an abstract base class use to represent a scalar or complex property, or a navigation property + of an entity. Scalar and complex properties use the derived class , + reference navigation properties use the derived class , and collection + navigation properties use the derived class . + + + + + Creates a from information in the given . + This method will create an instance of the appropriate subclass depending on the metadata contained + in the InternalMemberEntry instance. + + The internal member entry. + The new entry. + + + + Validates this property. + + + Collection of objects. Never null. If the entity is valid the collection will be empty. + + + + + Returns the equivalent generic object. + + The type of entity on which the member is declared. + The type of the property. + The equivalent generic object. + + + + Gets the name of the property. + + The property name. + + + + Gets or sets the current value of this property. + + The current value. + + + + The to which this member belongs. + + An entry for the entity that owns this member. + + + + Gets the backing this object. + + The internal member entry. + + + + Constants for C-S MSL XML. + + + + + The base for all all Entity Data Model (EDM) types that represent a scalar type from the EDM type system. + + + + + The base for all all Entity Data Model (EDM) types that represent a type from the EDM type system. + + + + + Represents an item in an Entity Data Model (EDM) . + + + + + Gets a value indicating whether this type is abstract. + + + + + Gets the optional base type of this type. + + + + + Allows the construction and modification of an Entity Data Model (EDM) navigation property. + + + + + EdmStructuralMember is the base for all types that represent members of structural items in the Entity Data Model (EDM) metadata construction and modification API. + + + + + Gets or sets the that specifies the association over which navigation takes place. + + + + + Gets or sets the that specifies which association end is the 'destination' end of the navigation and produces the navigation property result. + + + + + Allows the construction and modification of an entity type in an Entity Data Model (EDM) . + + + + + The base for all all Entity Data Model (EDM) types that represent a structured type from the EDM type system. + + + + + Gets or sets the optional that indicates the base entity type of the entity type. + + + + + Gets or sets a value indicating whether the entity type is abstract. + + + + + Gets or sets the collection of s that specifies the properties declared by the entity type. + + + + + Gets or sets the collection of s that indicates which properties from the collection are part of the entity key. + + + + + Gets or sets the optional collection of s that specifies the navigation properties declared by the entity type. + + + + + Provider to convert provider agnostic migration operations into SQL commands + that can be run against a Microsoft SQL Server database. + + + + + Common base class for providers that convert provider agnostic migration + operations into database provider specific SQL commands. + + + + + Converts a set of migration operations into database provider specific SQL. + + The operations to be converted. + Token representing the version of the database being targeted. + A list of SQL statements to be executed to perform the migration operations. + + + + Converts a set of migration operations into Microsoft SQL Server specific SQL. + + The operations to be converted. + Token representing the version of SQL Server being targeted (i.e. "2005", "2008"). + A list of SQL statements to be executed to perform the migration operations. + + + + Creates an empty connection for the current provider. + Allows derived providers to use connection other than . + + + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL to mark a table as a system table. + Generated SQL should be added using the Statement method. + + The table to mark as a system table. + + + + Generates SQL to create a database schema. + Generated SQL should be added using the Statement method. + + The name of the schema to create. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL for a . + Generated SQL should be added using the Statement method. + + The operation to produce SQL for. + + + + Generates SQL to specify a constant byte[] default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant bool default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant DateTime default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant DateTimeOffset default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant Guid default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant string default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant TimeSpan default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify a constant default value being set on a column. + This method just generates the actual value, not the SQL to set the default value. + + The value to be set. + SQL representing the default value. + + + + Generates SQL to specify the data type of a column. + This method just generates the actual type, not the SQL to create the column. + + The definition of the column. + SQL representing the data type. + + + + Generates a quoted name. The supplied name may or may not contain the schema. + + The name to be quoted. + The quoted name. + + + + Quotes an identifier for SQL Server. + + The identifier to be quoted. + The quoted identifier. + + + + Adds a new Statement to be executed against the database. + + The statement to be executed. + + Gets or sets a value indicating whether this statement should be performed outside of + the transaction scope that is used to make the migration process transactional. + If set to true, this operation will not be rolled back if the migration process fails. + + + + + Gets a new that can be used to build SQL. + + This is just a helper method to create a writer. Writing to the writer will + not cause SQL to be registered for execution. You must pass the generated + SQL to the Statement method. + + An empty text writer to use for SQL generation. + + + + Adds a new Statement to be executed against the database. + + The writer containing the SQL to be executed. + + + + Represents dropping an existing table. + + + + + Represents an operation to modify a database schema. + + + + + Initializes a new instance of the MigrationOperation class. + + + + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets additional arguments that may be processed by providers. + + + + + Gets an operation that will revert this operation. + + + + + Gets a value indicating if this operation may result in data loss. + + + + + Initializes a new instance of the DropTableOperation class. + + The name of the table to be dropped. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Initializes a new instance of the DropTableOperation class. + + The name of the table to be dropped. + An operation that represents reverting dropping the table. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table to be dropped. + + + + + Gets an operation that represents reverting dropping the table. + The inverse cannot be automatically calculated, + if it was not supplied to the constructor this property will return null. + + + + + + + + Represents a foreign key constraint being dropped from a table. + + + + + Base class for changes that affect foreign key constraints. + + + + + Initializes a new instance of the ForeignKeyOperation class. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets or sets the name of the table that the foreign key constraint targets. + + + + + Gets or sets the name of the table that the foreign key columns exist in. + + + + + The names of the foreign key column(s). + + + + + Gets a value indicating if a specific name has been supplied for this foreign key constraint. + + + + + Gets or sets the name of this foreign key constraint. + If no name is supplied, a default name will be calculated. + + + + + Initializes a new instance of the DropForeignKeyOperation class. + The PrincipalTable, DependentTable and DependentColumns properties should also be populated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Initializes a new instance of the DropForeignKeyOperation class. + + The operation that represents reverting dropping the foreign key constraint. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets an operation to drop the associated index on the foreign key column(s). + + An operation to drop the index. + + + + Gets an operation that represents reverting dropping the foreign key constraint. + The inverse cannot be automatically calculated, + if it was not supplied to the constructor this property will return null. + + + + + + + + Represents information about a column. + + + + + Initializes a new instance of the class. + + The data type for this column. + + + + Initializes a new instance of the class. + + The data type for this column. + + Additional details about the data type. + This includes details such as maximum length, nullability etc. + + + + + Determines if this column is a narrower data type than another column. + Used to determine if altering the supplied column definition to this definition will result in data loss. + + The column to compare to. + Details of the database provider being used. + True if this column is of a narrower data type. + + + + Gets the data type for this column. + + + + + Gets the CLR type corresponding to the database type of this column. + + + + + Gets the default value for the CLR type corresponding to the database type of this column. + + + + + Gets additional details about the data type of this column. + This includes details such as maximum length, nullability etc. + + + + + Gets or sets the name of the column. + + + + + Gets or sets a provider specific data type to use for this column. + + + + + Gets or sets a value indicating if this column can store null values. + + + + + Gets or sets a value indicating if values for this column will be generated by the database using the identity pattern. + + + + + Gets or sets the maximum length for this column. + Only valid for array data types. + + + + + Gets or sets the precision for this column. + Only valid for decimal data types. + + + + + Gets or sets the scale for this column. + Only valid for decimal data types. + + + + + Gets or sets a constant value to use as the default value for this column. + + + + + Gets or sets a SQL expression used as the default value for this column. + + + + + Gets or sets a value indicating if this column is fixed length. + Only valid for array data types. + + + + + Gets or sets a value indicating if this column supports Unicode characters. + Only valid for textual data types. + + + + + Gets or sets a value indicating if this column should be configured as a timestamp. + + + + + Configuration relating to the use of migrations for a given model. + You will typically create a configuration class that derives + from rather than + using this class. + + + + + Initializes a new instance of the DbMigrationsConfiguration class. + + + + + Adds a new SQL generator to be used for a given database provider. + + Name of the database provider to set the SQL generator for. + The SQL generator to be used. + + + + Gets the SQL generator that is set to be used with a given database provider. + + Name of the database provider to get the SQL generator for. + The SQL generator that is set for the database provider. + + + + Gets or sets a value indicating if automatic migrations can be used when migration the database. + + + + + Gets or sets a value indicating if data loss is acceptable during automatic migration. + If set to false an exception will be thrown if data loss may occur as part of an automatic migration. + + + + + Gets or sets the derived DbContext representing the model to be migrated. + + + + + Gets or sets the namespace used for code-based migrations. + + + + + Gets or sets the sub-directory that code-based migrations are stored in. + + + + + Gets or sets the code generator to be used when scaffolding migrations. + + + + + Gets or sets the assembly containing code-based migrations. + + + + + Gets or sets a value to override the connection of the database to be migrated. + + + + + Represents all Entity Framework related configuration + + + + + Exception thrown by during model creation when an invalid model is generated. + + + + + Initializes a new instance of ModelValidationException + + + + + Initializes a new instance of ModelValidationException + + The exception message. + + + + Initializes a new instance of ModelValidationException + + The exception message. + The inner exception. + + + + Attempt to determine the principal and dependent ends of this association. + + The following table illustrates the solution space. + + Source | Target || Prin | Dep | + -------|--------||-------|-------| + 1 | 1 || - | - | + 1 | 0..1 || Sr | Ta | + 1 | * || Sr | Ta | + 0..1 | 1 || Ta | Sr | + 0..1 | 0..1 || - | - | + 0..1 | * || Sr | Ta | + * | 1 || Ta | Sr | + * | 0..1 || Ta | Sr | + * | * || - | - | + + + + + Convention to process instances of found on navigation properties in the model. + + + + + Used to configure a property of an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Used to configure a property with length facets for an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Used to configure a primitive property of an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the property to be optional. + The database column used to store this property will be nullable. + + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be required. + The database column used to store this property will be non-nullable. + + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures how values for the property are generated by the database. + + + The pattern used to generate values for the property in the database. + Setting 'null' will remove the database generated pattern facet from the property. + Setting 'null' will cause the same runtime behavior as specifying 'None'. + + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be used as an optimistic concurrency token. + + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the property is to be used as an optimistic concurrency token. + + + Value indicating if the property is a concurrency token or not. + Specifying 'null' will remove the concurrency token facet from the property. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the data type of the database column used to store the property. + + Name of the database provider specific data type. + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the database column used to store the property. + + The name of the column. + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the order of the database column used to store the property. + This method is also used to specify key ordering when an entity type has a composite key. + + The order that this column should appear in the database table. + The same PrimitivePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to allow the maximum length supported by the database provider. + + The same LengthPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to have the specified maximum length. + + + The maximum length for the property. + Setting 'null' will remove any maximum length restriction from the property and a default length will be used for the database column. + + The same LengthPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be fixed length. + Use HasMaxLength to set the length that the property is fixed to. + + The same LengthPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be variable length. + Properties are variable length by default. + + The same LengthPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to allow the maximum length supported by the database provider. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to have the specified maximum length. + + + The maximum length for the property. + Setting 'null' will remove any maximum length restriction from the property. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be fixed length. + Use HasMaxLength to set the length that the property is fixed to. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be variable length. + properties are variable length by default. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be optional. + The database column used to store this property will be nullable. + properties are optional by default. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be required. + The database column used to store this property will be non-nullable. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures how values for the property are generated by the database. + + + The pattern used to generate values for the property in the database. + Setting 'null' will remove the database generated pattern facet from the property. + Setting 'null' will cause the same runtime behavior as specifying 'None'. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be used as an optimistic concurrency token. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the property is to be used as an optimistic concurrency token. + + + Value indicating if the property is a concurrency token or not. + Specifying 'null' will remove the concurrency token facet from the property. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the database column used to store the property. + + The name of the column. + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the data type of the database column used to store the property. + + Name of the database provider specific data type. + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the order of the database column used to store the property. + This method is also used to specify key ordering when an entity type has a composite key. + + The order that this column should appear in the database table. + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be a row version in the database. + The actual data type will vary depending on the database provider being used. + Setting the property to be a row version will automatically configure it to be an + optimistic concurrency token. + + The same BinaryPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures a discriminator column used to differentiate between types in an inheritance hierarchy. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the discriminator value used to identify the entity type being + configured from other types in the inheritance hierarchy. + + Type of the discriminator value. + The value to be used to identify the entity type. + A configuration object to configure the column used to store discriminator values. + + + + Configures the discriminator value used to identify the entity type being + configured from other types in the inheritance hierarchy. + + Type of the discriminator value. + The value to be used to identify the entity type. + A configuration object to configure the column used to store discriminator values. + + + + Configures the discriminator value used to identify the entity type being + configured from other types in the inheritance hierarchy. + + The value to be used to identify the entity type. + A configuration object to configure the column used to store discriminator values. + + + + A non-generic interface implemented by that allows operations on + any set object without knowing the type to which it applies. + + + + + An implementation of that wraps an existing set but makes + it read-only. + + + + + + Initializes a new instance of the class wrapped around + another existing set. + + The existing set. + + + + An implementation of for an item in a . + + + + + Represents an item in an representing a property name/value. + + + + + Gets or sets the value of the property represented by this item. + + The value. + + + + Gets the name of the property. + + The name. + + + + Gets a value indicating whether this item represents a complex property. + + true If this instance represents a complex property; otherwise, false. + + + + Gets the type of the underlying property. + + The property type. + + + + Initializes a new instance of the class. + + The data record. + The ordinal. + The value. + + + + Gets or sets the value of the property represented by this item. + + The value. + + + + Gets the name of the property. + + The name. + + + + Gets a value indicating whether this item represents a complex property. + + + true If this instance represents a complex property; otherwise, false. + + + + + Gets the type of the underlying property. + + The property type. + + + + This convention uses the name of the derived + class as the container for the conceptual model built by + Code First. + + + + + Initializes a new instance of the class. + + The model container name. + + + + Applies the convention to the given model. + + The model. + + + + Contains methods used to access the Entity Data Model created by Code First in the EDMX form. + These methods are typically used for debugging when there is a need to look at the model that + Code First creates internally. + + + + + Uses Code First with the given context and writes the resulting Entity Data Model to the given + writer in EDMX form. This method can only be used with context instances that use Code First + and create the model internally. The method cannot be used for contexts created using Database + First or Model First, for contexts created using a pre-existing , or + for contexts created using a pre-existing . + + The context. + The writer. + + + + Writes the Entity Data Model represented by the given to the + given writer in EDMX form. + + An object representing the EDM. + The writer. + + + + + Initializes a new instance of the class. + + The internal context. + The inner exception. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Subscribes the SerializeObjectState event. + + + + + Gets objects that represents the entities that could not + be saved to the database. + + The entries representing the entities that could not be saved. + + + + Holds exception state that will be serialized when the exception is serialized. + + + + + Completes the deserialization. + + The deserialized object. + + + + Gets or sets a value indicating whether the exception involved independent associations. + + + + + A non-generic version of the class. + + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal property entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Returns the equivalent generic object. + + The type of entity on which the member is declared. + The type of the property. + The equivalent generic object. + + + + Gets the property name. + + The property name. + + + + Gets or sets the original value of this property. + + The original value. + + + + Gets or sets the current value of this property. + + The current value. + + + + Gets or sets a value indicating whether the value of this property has been modified since + it was loaded from the database. + + + true if this instance is modified; otherwise, false. + + + + + The to which this property belongs. + + An entry for the entity that owns this property. + + + + The of the property for which this is a nested property. + This method will only return a non-null entry for properties of complex objects; it will + return null for properties of the entity itself. + + An entry for the parent complex property, or null if this is an entity property. + + + + Gets the backing this object. + + The internal member entry. + + + + This attribute can be applied to a class derived from to set which + version of the DbContext and conventions should be used when building + a model from code--also know as "Code First". See the + enumeration for details about DbModelBuilder versions. + + + If the attribute is missing from DbContextthen DbContext will always use the latest + version of the conventions. This is equivalent to using DbModelBuilderVersion.Latest. + + + + + Initializes a new instance of the class. + + The conventions version to use. + + + + Gets the conventions version. + + The conventions version. + + + + Return role name pair + + + + + + + + Allows the construction and modification of an entity set in an Entity Data Model (EDM) . + + + + + Represents an item in an Entity Data Model (EDM) . + + + + + Gets or sets the that specifies the entity type for the set. + + + + + DataModelEventArgs is the base argument type for all events raised by consumers of Entity Data Model (EDM) models. + + + + + Gets a value indicating the that caused the event to be raised. + + + + + Allows the construction and modification of a user-specified annotation (name-value pair) on a instance. + + + + + Gets or sets an optional namespace that can be used to distinguish the annotation from others with the same value. + + + + + Gets or sets the name of the annotation. + + + + + Gets or sets the value of the annotation. + + + + + Specifies the database table that a class is mapped to. + + + + + Initializes a new instance of the class. + + The name of the table the class is mapped to. + + + + The name of the table the class is mapped to. + + + + + The schema of the table the class is mapped to. + + + + + Utility class to prep the user's config file to run in an AppDomain + + + + + Updates a config file by adding binding redirects for EntityFramework.dll. + This ensures that the user's code can be ran in an AppDomain and the exact + same version of the assembly will be used for both domains. + + That path of the user's config file. Can also be null or a path to an non-existent file. + The path of the updated config file. It is the caller's responsibility to delete this. + + + + Represents a column being dropped from a table. + + + + + Initializes a new instance of the DropColumnOperation class. + + The name of the table the column should be dropped from. + The name of the column to be dropped. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Initializes a new instance of the DropColumnOperation class. + + The name of the table the column should be dropped from. + The name of the column to be dropped. + The operation that represents reverting the drop operation. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table the column should be dropped from. + + + + + Gets the name of the column to be dropped. + + + + + Gets an operation that represents reverting dropping the column. + The inverse cannot be automatically calculated, + if it was not supplied to the constructor this property will return null. + + + + + + + + Represents creating a database index. + + + + + Common base class for operations affecting indexes. + + + + + Initializes a new instance of the IndexOperation class. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets or sets the table the index belongs to. + + + + + Gets or sets the columns that are indexed. + + + + + Gets a value indicating if a specific name has been supplied for this index. + + + + + Gets or sets the name of this index. + If no name is supplied, a default name will be calculated. + + + + + Initializes a new instance of the CreateIndexOperation class. + The Table and Columns properties should also be populated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets or sets a value indicating if this is a unique index. + + + + + Gets an operation to drop this index. + + + + + + + + Generates VB.Net code for a code-based migration. + + + + + Base class for providers that generate code for code-based migrations. + + + + + Generates the code that should be added to the users project. + + Unique identifier of the migration. + Operations to be performed by the migration. + Source model to be stored in the migration metadata. + Target model to be stored in the migration metadata. + Namespace that code should be generated in. + Name of the class that should be generated. + The generated code. + + + + + + + Generates the primary code file that the user can view and edit. + + Operations to be performed by the migration. + Namespace that code should be generated in. + Name of the class that should be generated. + The generated code. + + + + Generates the code behind file with migration metadata. + + Unique identifier of the migration. + Source model to be stored in the migration metadata. + Target model to be stored in the migration metadata. + Namespace that code should be generated in. + Name of the class that should be generated. + The generated code. + + + + Generates a property to return the source or target model in the code behind file. + + Name of the property. + Model to be returned. + Text writer to add the generated code to. + + + + Generates a namespace, using statements and class definition. + + Namespace that code should be generated in. + Name of the class that should be generated. + Text writer to add the generated code to. + Base class for the generated class. + A value indicating if this class is being generated for a code-behind file. + + + + Generates the closing code for a class that was started with WriteClassStart. + + Namespace that code should be generated in. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an as part of a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an as part of a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a as part of a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to specify a set of column names using a lambda expression. + + The columns to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to specify the definition for a . + + The column definition to generate code for. + Text writer to add the generated code to. + A value indicating whether to include the column name in the definition. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column of unknown data type. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Removes any invalid characters from the name of an database artifact. + + The name to be scrubbed. + The scrubbed name. + + + + Gets the type name to use for a column of the given data type. + + The data type to translate. + The type name to use in the generated migration. + + + + Quotes an identifier using appropriate escaping to allow it to be stored in a string. + + The identifier to be quoted. + The quoted identifier. + + + + Represents an exception that occurred while running an operation in another AppDomain in the . + + + + + Initializes a new instance of the ToolingException class. + + Error that explains the reason for the exception. + The type of the exception that was thrown. + The stack trace of the exception that was thrown. + + + + + + + + + + Gets the type of the exception that was thrown. + + + + + Gets the stack trace of the exception that was thrown. + + + + + Generates C# code for a code-based migration. + + + + + + + + Generates the primary code file that the user can view and edit. + + Operations to be performed by the migration. + Namespace that code should be generated in. + Name of the class that should be generated. + The generated code. + + + + Generates the code behind file with migration metadata. + + Unique identifier of the migration. + Source model to be stored in the migration metadata. + Target model to be stored in the migration metadata. + Namespace that code should be generated in. + Name of the class that should be generated. + The generated code. + + + + Generates a property to return the source or target model in the code behind file. + + Name of the property. + Model to be returned. + Text writer to add the generated code to. + + + + Generates a namespace, using statements and class definition. + + Namespace that code should be generated in. + Name of the class that should be generated. + Text writer to add the generated code to. + Base class for the generated class. + A value indicating if this class is being generated for a code-behind file. + + + + Generates the closing code for a class that was started with WriteClassStart. + + Namespace that code should be generated in. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an as part of a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an as part of a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a as part of a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to specify a set of column names using a lambda expression. + + The columns to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform an . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to specify the definition for a . + + The column definition to generate code for. + Text writer to add the generated code to. + A value indicating whether to include the column name in the definition. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to specify the default value for a column of unknown data type. + + The value to be used as the default. + Code representing the default value. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Generates code to perform a . + + The operation to generate code for. + Text writer to add the generated code to. + + + + Removes any invalid characters from the name of an database artifact. + + The name to be scrubbed. + The scrubbed name. + + + + Gets the type name to use for a column of the given data type. + + The data type to translate. + The type name to use in the generated migration. + + + + Quotes an identifier using appropriate escaping to allow it to be stored in a string. + + The identifier to be quoted. + The quoted identifier. + + + + Convention to set the entity set name to be a pluralized version of the entity type name. + + + + + Convention to set the table name to be a pluralized version of the entity type name. + + + + + Convention to detect navigation properties to be inverses of each other when only one pair + of navigation properties exists between the related types. + + + + + Convention to process instances of found on types in the model. + + + + + Configures an required relationship from an entity type. + + The entity type that the relationship originates from. + The entity type that the relationship targets. + + + + Configures the relationship to be required:many with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:many without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:optional with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:optional without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:required with a navigation property on the other side of the relationship. + The entity type being configured will be the dependent and contain a foreign key to the principal. + The entity type that the relationship targets will be the principal in the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:required without a navigation property on the other side of the relationship. + The entity type being configured will be the dependent and contain a foreign key to the principal. + The entity type that the relationship targets will be the principal in the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:required with a navigation property on the other side of the relationship. + The entity type being configured will be the principal in the relationship. + The entity type that the relationship targets will be the dependent and contain a foreign key to the principal. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be required:required without a navigation property on the other side of the relationship. + The entity type being configured will be the principal in the relationship. + The entity type that the relationship targets will be the dependent and contain a foreign key to the principal. + + A configuration object that can be used to further configure the relationship. + + + + Populate the table mapping structure + + + + + Sets nullability for association set mappings' foreign keys for 1:* and 1:0..1 associations + when no base types share the the association set mapping's table + + + + + Makes sure only the required property mappings are present + + + + + Determines if the table and entity type need mapping, and if not, removes the existing entity type mapping + + + + + Generic wrapper around to allow results to be + returned as generic + + The type of the element. + + + + Executes the query and returns an enumerator for the elements. + + An + + object that can be used to iterate through the elements. + + + + Executes the query and returns an enumerator for the elements. + + + An object that can be used to iterate through the elements. + + + + + Returns a that contains the SQL string that was set + when the query was created. The parameters are not included. + + + A that represents this instance. + + + + + Throws an exception indicating that binding directly to a store query is not supported. + + + Never returns; always throws. + + + + + Returns false. + + false. + + + + The internal class used to implement and + . + This internal class contains all the common implementation between the generic and non-generic + entry classes and also allows for a clean internal factoring without compromising the public API. + + + + + Base class for all internal entries that represent different kinds of properties. + + + + + Initializes a new instance of the class. + + The internal entity entry. + The member metadata. + + + + Validates this property. + + A sequence of validation errors for this property. Empty if no errors. Never null. + + + + Creates a new non-generic backed by this internal entry. + The actual subtype of the DbMemberEntry created depends on the metadata of this internal entry. + + The new entry. + + + + Creates a new generic backed by this internal entry. + The actual subtype of the DbMemberEntry created depends on the metadata of this internal entry. + + The type of the entity. + The type of the property. + The new entry. + + + + Gets the property name. + The property is virtual to allow mocking. + + The property name. + + + + Gets or sets the current value of the navigation property. + + The current value. + + + + Gets the internal entity entry property belongs to. + This property is virtual to allow mocking. + + The internal entity entry. + + + + Gets the entry metadata. + + The entry metadata. + + + + Initializes a new instance of the class. + + The internal entry. + The property info. + + + + Creates a delegate that will get the value of this property. + + The delegate. + + + + Creates a delegate that will set the value of this property. + + The delegate. + + + + Returns true if the property of the entity that this property is ultimately part + of is set as modified. If this is a property of an entity, then this method returns + true if the property is modified. If this is a property of a complex object, then + this method returns true if the top-level complex property on the entity is modified. + + True if the entity property is modified. + + + + Sets the property of the entity that this property is ultimately part of to modified. + If this is a property of an entity, then this method marks it as modified. + If this is a property of a complex object, then this method marks the top-level + complex property as modified. + + + + + Throws if the user attempts to set a complex property to null. + + The value. + + + + Sets the given value directly onto the underlying entity object. + + The value. + True if the property had a setter that we could attempt to call; false if no setter was available. + + + + Sets the property value, potentially by setting individual nested values for a complex + property. + + The value. + + + + Gets an internal object representing a scalar or complex property of this property, + which must be a mapped complex property. + This method is virtual to allow mocking. + + The property. + The type of object requested, which may be null or 'object' if any type can be accepted. + if set to true then the found property must be a complex property. + The entry. + + + + Validates that the owning entity entry is associated with an underlying and + is not just wrapping a non-attached entity. + + + + + Creates a new non-generic backed by this internal entry. + The runtime type of the DbMemberEntry created will be or a subtype of it. + + The new entry. + + + + Creates a new generic backed by this internal entry. + The runtime type of the DbMemberEntry created will be or a subtype of it. + + The type of the entity. + The type of the property. + The new entry. + + + + Returns parent property, or null if this is a property on the top-level entity. + + + + + Gets the current values of the parent entity or complex property. + That is, the current values that contains the value for this property. + + The parent current values. + + + + Gets the original values of the parent entity or complex property. + That is, the original values that contains the value for this property. + + The parent original values. + + + + A delegate that reads the value of this property. + May be null if there is no way to set the value due to missing accessors on the type. + + + + + A delegate that sets the value of this property. + May be null if there is no way to set the value due to missing accessors on the type. + + + + + Gets or sets the original value. + Note that complex properties are returned as objects, not property values. + + + + + Gets or sets the current value. + Note that complex properties are returned as objects, not property values. + Also, for complex properties, the object returned is the actual complex object from the entity + and setting the complex object causes the actual object passed to be set onto the entity. + + The current value. + + + + Gets or sets a value indicating whether this property is modified. + + + + + Gets the property metadata. + + The property metadata. + + + + Represents an entity used to store metadata about an EDM in the database. + + + + + Attempts to get the model hash calculated by Code First for the given context. + This method will return null if the context is not being used in Code First mode. + + The context. + The hash string. + + + + Gets or sets the ID of the metadata entity, which is currently always 1. + + The id. + + + + Gets or sets the model hash which is used to check whether the model has + changed since the database was created from it. + + The model hash. + + + + Represents a non-generic LINQ to Entities query against a DbContext. + + + + + An internal interface implemented by and that allows access to + the internal query without using reflection. + + + + + The underlying internal set. + + + + + Internal constructor prevents external classes deriving from DbQuery. + + + + + Throws an exception indicating that binding directly to a store query is not supported. + Instead populate a DbSet with data, for example by using the Load extension method, and + then bind to local data. For WPF bind to DbSet.Local. For Windows Forms bind to + DbSet.Local.ToBindingList(). + + + Never returns; always throws. + + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + + Returns a new query where the entities returned will not be cached in the . + + A new query with NoTracking applied. + + + + Returns the equivalent generic object. + + The type of element for which the query was created. + The generic set object. + + + + Returns a representation of the underlying query. + + + The query string. + + + + + Returns false. + + false. + + + + The IQueryable element type. + + + + + The IQueryable LINQ Expression. + + + + + The IQueryable provider. + + + + + Gets the underlying internal query object. + + The internal query. + + + + The internal query object that is backing this DbQuery + + + + + Instances of this class are returned from the ComplexProperty method of + and allow access to the state of a complex property. + + The type of the entity to which this property belongs. + The type of the property. + + + + Instances of this class are returned from the Property method of + and allow access to the state of the scalar + or complex property. + + The type of the entity to which this property belongs. + The type of the property. + + + + This is an abstract base class use to represent a scalar or complex property, or a navigation property + of an entity. Scalar and complex properties use the derived class , + reference navigation properties use the derived class , and collection + navigation properties use the derived class . + + The type of the entity to which this property belongs. + The type of the property. + + + + Creates a from information in the given . + This method will create an instance of the appropriate subclass depending on the metadata contained + in the InternalMemberEntry instance. + + The internal member entry. + The new entry. + + + + Returns a new instance of the non-generic class for + the property represented by this object. + + A non-generic version. + + + + Validates this property. + + + Collection of objects. Never null. If the entity is valid the collection will be empty. + + + + + Gets or sets the current value of this property. + + The current value. + + + + Gets the underlying . + + The internal member entry. + + + + The to which this member belongs. + + An entry for the entity that owns this member. + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal property entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Returns a new instance of the non-generic class for + the property represented by this object. + + A non-generic version. + + + + Gets the property name. + + The property name. + + + + Gets or sets the original value of this property. + + The original value. + + + + Gets or sets the current value of this property. + + The current value. + + + + Gets or sets a value indicating whether the value of this property has been modified since + it was loaded from the database. + + + true if this instance is modified; otherwise, false. + + + + + The to which this property belongs. + + An entry for the entity that owns this property. + + + + The of the property for which this is a nested property. + This method will only return a non-null entry for properties of complex objects; it will + return null for properties of the entity itself. + + An entry for the parent complex property, or null if this is an entity property. + + + + Gets the underlying as an . + + The internal member entry. + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal property entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Returns a new instance of the non-generic class for + the property represented by this object. + + A non-generic version. + + + + Gets an object that represents a nested property of this property. + This method can be used for both scalar or complex properties. + + The name of the nested property. + An object representing the nested property. + + + + Gets an object that represents a nested property of this property. + This method can be used for both scalar or complex properties. + + The type of the nested property. + The name of the nested property. + An object representing the nested property. + + + + Gets an object that represents a nested property of this property. + This method can be used for both scalar or complex properties. + + The type of the nested property. + An expression representing the nested property. + An object representing the nested property. + + + + Gets an object that represents a nested complex property of this property. + + The name of the nested property. + An object representing the nested property. + + + + Gets an object that represents a nested complex property of this property. + + The type of the nested property. + The name of the nested property. + An object representing the nested property. + + + + Gets an object that represents a nested complex property of this property. + + The type of the nested property. + An expression representing the nested property. + An object representing the nested property. + + + + The context for EdmModel Validation + + + + + The context for DataModel Validation + + + + + Enumerates all s declared or inherited by an . + + + + + Primitive Types as defined by the Entity Data Model (EDM). + + + + + Binary Type Kind + + + + + Boolean Type Kind + + + + + Byte Type Kind + + + + + DateTime Type Kind + + + + + Decimal Type Kind + + + + + Double Type Kind + + + + + Guid Type Kind + + + + + Single Type Kind + + + + + SByte Type Kind + + + + + Int16 Type Kind + + + + + Int32 Type Kind + + + + + Int64 Type Kind + + + + + String Type Kind + + + + + Time Type Kind + + + + + DateTimeOffset Type Kind + + + + + EdmModel is the top-level container for namespaces and entity containers belonging to the same logical Entity Data Model (EDM) model. + + + + + Gets or sets an optional value that indicates the entity model version. + + + + + Gets or sets the containers declared within the model. + + + + + Gets or sets the namespaces declared within the model. + + + + + Represents a specific use of a type in a Database Metadata item. + + + + + The base for all all Database Metadata types that support annotation using . + + + + + DbDataModelItem is the base for all types in the Database Metadata construction and modification API. + + + + + Gets or sets the currently assigned annotations. + + + + + Gets or sets an optional instance that applies additional constraints to a referenced primitive type. + + + Accessing this property forces the creation of a DbPrimitiveTypeFacets value if no value has previously been set. Use to determine whether or not this property currently has a value. + + + + + Gets or sets a value indicating whether the represented type is a collection type. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered nullable. + + + + + Gets a value indicating whether the type has been configured as a row type by the addition of one or more RowColumns. + + + + + Allows the construction and modification of a column in a table. + + + + + When implemented in derived types, allows the construction and modification of a column in a Database Metadata table or row. + + + + + NamedDbItem is the base for all types in the Database Metadata construction and modification API with a property. + + + + + Gets or sets the currently assigned name. + + + + + Gets or sets a string indicating the database-specific type of the column. + + + + + Gets or sets a value indicating whether the column is nullable. + + + + + Gets or sets an optional instance that applies additional constraints to the referenced database-specific type of the column. + + + + + Gets or sets a value indicating whether the column is part of the table's primary key. + + + + + Gets or sets a value indicating if and how the value of the column is automatically generated. + + + + + Gets or sets an optional value indicating the collation specific to this table column. + + + + + Gets or sets an optional value that specifies the default value for the column. + + + + + This class is used by Code First Migrations to read and write migration history + from the database. It is not intended to be used by other code and is only public + so that it can be accessed by EF when running under partial trust. It may be + changed or removed in the future. + + + + + Gets or sets the Id of the migration this row represents. + + + + + Gets or sets the date and time that this migrations history entry was created. + + + + + Gets or sets the state of the model after this migration was applied. + + + + + Gets or sets the version of Entity Framework that created this entry. + + + + + Validation error. Can be either entity or property level validation error. + + + + + Name of the invalid property. Can be null (e.g. for entity level validations) + + + + + Validation error message. + + + + + Creates an instance of . + + Name of the invalid property. Can be null. + Validation error message. Can be null. + + + + Gets name of the invalid property. + + + + + Gets validation error message. + + + + + Convention to enable cascade delete for any required relationships. + + + + + Convention to add a cascade delete to the join table from both tables involved in a many to many relationship. + + + + + Convention to process instances of found on primitive properties in the model. + + + + + Configures a condition used to discriminate between types in an inheritance hierarchy based on the values assigned to a property. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the condition to require a value in the property. + + Rows that do not have a value assigned to column that this property is stored in are + assumed to be of the base type of this entity type. + + + + + Allows the conventions used by a instance to be customized. + Currently removal of one or more default conventions is the only supported operation. + The default conventions can be found in the System.Data.Entity.Conventions namespace. + + + + + Disables a convention for the . + The default conventions that are available for removal can be found in the System.Data.Entity.Conventions namespace. + + The type of the convention to be disabled. + + + + A wrapper around EntityKey that allows key/values pairs that have null values to + be used. This allows Added entities with null key values to be searched for in + the ObjectStateManager. + + + + The key name/key value pairs, where some key values may be null + + + + Creates a new WrappedEntityKey instance. + + The entity set that the key belongs to. + The fully qualified name of the given entity set. + The key values, which may be null or contain null values. + The name of the parameter passed for keyValue by the user, which is used when throwing exceptions. + + + + True if any of the key values are null, which means that the EntityKey will also be null. + + + + + An actual EntityKey, or null if any of the key values are null. + + + + + The key name/key value pairs of the key, in which some of the key values may be null. + + + + + Serialize the to the XmlWriter + + The DbModel to serialize + The XmlWriter to serialize to + + + + Serializes an that conforms to the restrictions of a single CSDL schema file to an XML writer. The model to be serialized must contain a single and a single . + + + + + Serialize the to the XmlWriter. + + The EdmModel to serialize, mut have only one and one + The XmlWriter to serialize to + + + + Allows the construction and modification of an entity container in an Entity Data Model (EDM) . + + + + + Gets all s declared within the namspace. Includes s and s. + + + + + Gets or sets the collection of s that specifies the association sets within the container. + + + + + Gets or sets the collection of s that specifies the entity sets within the container. + + + + + Concurrency mode for properties. + + + + + Default concurrency mode: the property is never validated at write time + + + + + Fixed concurrency mode: the property is always validated at write time + + + + + Collection semantics for properties. + + + + + The property does not have a collection type or does not specify explicit collection semantics. + + + + + The property is an unordered collection that may contain duplicates. + + + + + The property is an ordered collection that may contain duplicates. + + + + + Strongly-typed and parameterized string resources. + + + + + A string like "Applying automatic migration: {0}." + + + + + A string like "Reverting automatic migration: {0}." + + + + + A string like "Applying explicit migration: {0}." + + + + + A string like "Reverting explicit migration: {0}." + + + + + A string like "Applying explicit migrations: [{1}]." + + + + + A string like "Reverting migrations: [{1}]." + + + + + A string like "Target database is already at version {0}." + + + + + A string like "Target database is: {0}." + + + + + A string like "'{1}' (DataSource: {0}, Provider: {2}, Origin: {3})" + + + + + A string like "The specified target migration '{0}' does not exist. Ensure that target migration refers to an existing migration id." + + + + + A string like "The Foreign Key on table '{0}' with columns '{1}' could not be created because the principal key columns could not be determined. Use the AddForeignKey fluent API to fully specify the Foreign Key." + + + + + A string like "'{0}' is not a valid target migration. When targeting a previously applied automatic migration, use the full migration id including timestamp." + + + + + A string like "'{0}' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them." + + + + + A string like "The target context '{0}' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory." + + + + + A string like "The specified migration name '{0}' is ambiguous. Specify the full migration id including timestamp instead." + + + + + A string like "The migrations configuration type '{0}' was not be found in the assembly '{1}'." + + + + + A string like "More than one migrations configuration type '{0}' was found in the assembly '{1}'. Specify the fully qualified name of the one to use." + + + + + A string like "No migrations configuration type was found in the assembly '{0}'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration)." + + + + + A string like "More than one migrations configuration type was found in the assembly '{0}'. Specify the name of the one to use." + + + + + A string like "The type '{0}' is not a migrations configuration type." + + + + + A string like "The migrations configuration type '{0}' must have a public default constructor." + + + + + A string like "The migrations configuration type '{0}' must not be abstract." + + + + + A string like "The migrations configuration type '{0}' must not be generic." + + + + + A string like "In VB.NET projects, the migrations namespace '{0}' must be under the root namespace '{1}'. Update the migrations project's root namespace to allow classes under the migrations namespace to be added." + + + + + + A string like "The argument '{0}' cannot be null, empty or contain only white space." + + + + + A string like "The argument property '{0}' cannot be null." + + + + + A string like "The precondition '{0}' failed. {1}" + + + + + A string like "The type '{0}' has already been configured as a complex type. It cannot be reconfigured as an entity type." + + + + + A string like "The type '{0}' has already been configured as an entity type. It cannot be reconfigured as a complex type." + + + + + A string like "The key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property." + + + + + A string like "The foreign key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property." + + + + + A string like "The property '{0}' is not a declared property on type '{1}'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property." + + + + + A string like "The navigation property '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid navigation property." + + + + + A string like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'." + + + + + A string like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. Use dotted paths for nested properties: C#: 't => t.MyProperty.MyProperty' VB.Net: 'Function(t) t.MyProperty.MyProperty'." + + + + + A string like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New From {{ t.MyProperty1, t.MyProperty2 }}'." + + + + + A string like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New From {{ t.MyProperty1, t.MyProperty2 }}'." + + + + + + A string like "Conflicting configuration settings were specified for property '{0}' on type '{1}': {2}" + + + + + A string like "Conflicting configuration settings were specified for column '{0}' on table '{1}': {2}" + + + + + A string like "{0} = {1} conflicts with {2} = {3}" + + + + + A string like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from ComplexObject." + + + + + A string like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject." + + + + + A string like "The navigation property '{0}' declared on type '{1}' cannot be the inverse of itself." + + + + + A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting foreign keys." + + + + + A string like "Values of incompatible types ('{1}' and '{2}') were assigned to the '{0}' discriminator column. Values of the same type must be specified. To explicitly specify the type of the discriminator column use the HasColumnType method." + + + + + A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting mapping information." + + + + + A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting cascade delete operations using 'WillCascadeOnDelete'." + + + + + A string like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting multiplicities." + + + + + A string like "The MaxLengthAttribute on property '{0}' on type '{1} is not valid. The Length value must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length." + + + + + A string like "The StringLengthAttribute on property '{0}' on type '{1}' is not valid. The maximum length must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length." + + + + + A string like "Unable to determine composite primary key ordering for type '{0}'. Use the ColumnAttribute or the HasKey method to specify an order for composite primary keys." + + + + + A string like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. Name must not be empty." + + + + + A string like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The foreign key name '{2}' was not found on the dependent type '{3}'. The Name value should be a comma separated list of foreign key property names." + + + + + A string like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The navigation property '{2}' was not found on the dependent type '{1}'. The Name value should be a valid navigation property name." + + + + + A string like "Unable to determine a composite foreign key ordering for foreign key on type {0}. When using the ForeignKey data annotation on composite foreign key properties ensure order is specified by using the Column data annotation or the fluent API." + + + + + A string like "The InversePropertyAttribute on property '{2}' on type '{3}' is not valid. The property '{0}' is not a valid navigation property on the related type '{1}'. Ensure that the property exists and is a valid reference or collection navigation property." + + + + + A string like "A relationship cannot be established from property '{0}' on type '{1}' to property '{0}' on type '{1}'. Check the values in the InversePropertyAttribute to ensure relationship definitions are unique and reference from one navigation property to its corresponding inverse navigation property." + + + + + A string like "\t{0}: {1}: {2}" + + + + + A string like "A key is registered for the derived type '{0}'. Keys can only be registered for the root type '{1}'." + + + + + A string like "The {0} value '{1}' already exists in the user-defined dictionary." + + + + + A string like "The type '{0}' has already been mapped to table '{1}'. Specify all mapping aspects of a table in a single Map call." + + + + + A string like "Map was called more than once for type '{0}' and at least one of the calls didn't specify the target table name." + + + + + A string like "The derived type '{0}' has already been mapped using the chaining syntax. A derived type can only be mapped once using the chaining syntax." + + + + + A string like "An "is not null" condition cannot be specified on property '{0}' on type '{1}' because this property is not included in the model. Check that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation." + + + + + A string like "Values of type '{0}' cannot be used as type discriminator values. Supported types include byte, signed byte, bool, int16, int32, int64, and string." + + + + + A string like "Unable to add the convention '{0}'. Could not find an existing convention of type '{1}' in the current convention set." + + + + + A string like "Not all properties for type '{0}' have been mapped. Either map those properties or explicitly excluded them from the model." + + + + + A string like "Unable to determine the provider name for connection of type '{0}'." + + + + + A string like "The qualified table name '{0}' contains an invalid schema name. Schema names must have a non-zero length." + + + + + A string like "The qualified table name '{0}' contains an invalid table name. Table names must have a non-zero length." + + + + + A string like "Properties for type '{0}' can only be mapped once. Ensure the MapInheritedProperties method is only used during one call to the Map method." + + + + + A string like "Properties for type '{0}' can only be mapped once. Ensure the Properties method is used and that repeated calls specify each non-key property only once." + + + + + A string like "Properties for type '{0}' can only be mapped once. The non-key property '{1}' is mapped more than once. Ensure the Properties method specifies each non-key property only once." + + + + + A string like "The property '{1}' on type '{0}' cannot be mapped because it has been explicitly excluded from the model." + + + + + A string like "The entity types '{0}' and '{1}' cannot share table '{2}' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them." + + + + + A string like "The property '{0}' cannot be used as a key property on the entity '{1}' because the property type is not a valid key type. Only scalar types, string and byte[] are supported key types." + + + + + A string like "The specified table '{0}' was not found in the model. Ensure that the table name has been correctly specified." + + + + + A string like "The specified association foreign key columns '{0}' are invalid. The number of columns specified must match the number of primary key columns." + + + + + A string like "Unable to determine the principal end of an association between the types '{0}' and '{1}'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations." + + + + + A string like "The abstract type '{0}' has no mapped descendents and so cannot be mapped. Either remove '{0}' from the model or add one or more types deriving from '{0}' to the model. " + + + + + A string like "The type '{0}' cannot be mapped as defined because it maps inherited properties from types that use entity splitting or another form of inheritance. Either choose a different inheritance mapping strategy so as to not map inherited properties, or change all types in the hierarchy to map inherited properties and to not use splitting. " + + + + + A string like "Cannot get value for property '{0}' from entity of type '{1}' because the property has no get accessor." + + + + + A string like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor." + + + + + + A string like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor and is in the '{2}' state." + + + + + A string like "Member '{0}' cannot be called for property '{1}' on entity of type '{2}' because the property is not part of the Entity Data Model." + + + + + + A string like "Cannot call the {0} method for an entity of type '{1}' on a DbSet for entities of type '{2}'. Only entities of type '{2}' or derived from type '{2}' can be added, attached, or removed." + + + + + A string like "Cannot call the Create method for the type '{0}' on a DbSet for entities of type '{1}'. Only entities of type '{1}' or derived from type '{1}' can be created." + + + + + + + A string like "The property '{0}' on type '{1}' is a collection navigation property. The Collection method should be used instead of the Reference method." + + + + + A string like "The property '{0}' on type '{1}' is a reference navigation property. The Reference method should be used instead of the Collection method." + + + + + A string like "The property '{0}' on type '{1}' is not a navigation property. The Reference and Collection methods can only be used with navigation properties. Use the Property or ComplexProperty method." + + + + + A string like "The property '{0}' on type '{1}' is not a primitive or complex property. The Property method can only be used with primitive or complex properties. Use the Reference or Collection method." + + + + + A string like "The property '{0}' on type '{1}' is not a complex property. The ComplexProperty method can only be used with complex properties. Use the Property, Reference or Collection method." + + + + + A string like "The property '{0}' on type '{1}' is not a primitive property, complex property, collection navigation property, or reference navigation property." + + + + + A string like ""The property '{0}' from the property path '{1}' is not a complex property on type '{2}'. Property paths must be composed of complex properties for all except the final property."" + + + + + A string like ""The property path '{0}' cannot be used for navigation properties. Property paths can only be used to access primitive or complex properties."" + + + + + A string like "The navigation property '{0}' on entity type '{1}' cannot be used for entities of type '{2}' because it refers to entities of type '{3}'." + + + + + A string like "The generic type argument '{0}' cannot be used with the Member method when accessing the collection navigation property '{1}' on entity type '{2}'. The generic type argument '{3}' must be used instead." + + + + + A string like "The property '{0}' on entity type '{1}' cannot be used for objects of type '{2}' because it is a property for objects of type '{3}'." + + + + + A string like "The expression passed to method {0} must represent a property defined on the type '{1}'." + + + + + A string like "{0} cannot be used for entities in the {1} state." + + + + + A string like "Cannot set non-nullable property '{0}' of type '{1}' to null on object of type '{2}'." + + + + + A string like "The property '{0}' in the entity of type '{1}' is null. Store values cannot be obtained for an entity with a null complex property." + + + + + A string like "Cannot assign value of type '{0}' to property '{1}' of type '{2}' in property values for type '{3}'." + + + + + A string like "The '{0}' property does not exist or is not mapped for the type '{1}'." + + + + + A string like "Cannot copy values from DbPropertyValues for type '{0}' into DbPropertyValues for type '{1}'." + + + + + A string like "Cannot copy from property values for object of type '{0}' into property values for object of type '{1}'." + + + + + A string like "The value of the complex property '{0}' on entity of type '{1}' is null. Complex properties cannot be set to null and values cannot be set for null complex properties." + + + + + A string like "The value of the nested property values property '{0}' on the values for entity of type '{1}' is null. Nested property values cannot be set to null and values cannot be set for null complex properties." + + + + + A string like "The model backing the '{0}' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)." + + + + + A string like "Database '{0}' cannot be created because it already exists." + + + + + + + A string like "Failed to set database initializer of type '{0}' for DbContext type '{1}' specified in the application configuration. See inner exception for details." + + + + + A string like "Configuration for DbContext type '{0}' is specified multiple times in the application configuration. Each context can only be configured once." + + + + + A string like "Failed to set Database.DefaultConnectionFactory to an instance of the '{0}' type as specified in the application configuration. See inner exception for details." + + + + + A string like "The type '{0}' could not be found. The type name must be an assembly-qualified name." + + + + + A string like "The connection string '{0}' in the application's configuration file does not contain the required providerName attribute."" + + + + + A string like "The entity found was of type {0} when an entity of type {1} was requested." + + + + + A string like "The type '{0}' is mapped as a complex type. The Set method, DbSet objects, and DbEntityEntry objects can only be used with entity types, not complex types." + + + + + A string like "The type '{0}' is not attributed with EdmEntityTypeAttribute but is contained in an assembly attributed with EdmSchemaAttribute. POCO entities that do not use EdmEntityTypeAttribute cannot be contained in the same assembly as non-POCO entities that use EdmEntityTypeAttribute." + + + + + A string like "The entity type {0} is not part of the model for the current context." + + + + + A string like "No connection string named '{0}' could be found in the application config file." + + + + + A string like "The collection navigation property '{0}' on the entity of type '{1}' cannot be set because the entity type does not define a navigation property with a set accessor." + + + + + A string like "Multiple object sets per type are not supported. The object sets '{0}' and '{1}' can both contain instances of type '{2}'." + + + + + A string like "The context type '{0}' must have a public constructor taking an EntityConnection." + + + + + A string like "An unexpected exception was thrown during validation of '{0}' when invoking {1}.IsValid. See the inner exception for details." + + + + + A string like "An unexpected exception was thrown during validation of '{0}' when invoking {1}.Validate. See the inner exception for details." + + + + + A string like "The database name '{0}' is not supported because it is an MDF file name. A full connection string must be provided to attach an MDF file." + + + + + A string like "The context factory type '{0}' must have a public default constructor." + + + + + A string like "The '{0}' property of EdmPrimitiveType is fixed and cannot be set." + + + + + A string like "The namespace '{0}' is a system namespace and cannot be used by other schemas. Choose another namespace name." + + + + + A string like "Role '{0}' in AssociationSets '{1}' and '{2}' refers to the same EntitySet '{3}' in EntityContainer '{4}'. Make sure that if two or more AssociationSets refer to the same AssociationType, the ends do not refer to the same EntitySet." + + + + + A string like "The referenced EntitySet '{0}' for End '{1}' could not be found in the containing EntityContainer." + + + + + A string like "Type '{0}' is derived from type '{1}' that is the type for EntitySet '{2}'. Type '{0}' defines new concurrency requirements that are not allowed for subtypes of base EntitySet types." + + + + + A string like "EntitySet '{0}' is based on type '{1}' that has no keys defined." + + + + + A string like "The end name '{0}' is already defined." + + + + + A string like "The key specified in EntityType '{0}' is not valid. Property '{1}' is referenced more than once in the Key element." + + + + + A string like "Property '{0}' has a CollectionKind specified but is not a collection property." + + + + + A string like "Property '{0}' has a CollectionKind specified. CollectionKind is only supported in version 1.1 EDM models." + + + + + A string like "ComplexType '{0}' is marked as abstract. Abstract ComplexTypes are only supported in version 1.1 EDM models." + + + + + A string like "ComplexType '{0}' has a BaseType specified. ComplexType inheritance is only supported in version 1.1 EDM models." + + + + + A string like "Key part '{0}' for type '{1}' is not valid. All parts of the key must be non-nullable." + + + + + A string like "The property '{0}' in EntityType '{1}' is not valid. All properties that are part of the EntityKey must be of PrimitiveType." + + + + + A string like "Key usage is not valid. The {0} class cannot define keys because one of its base classes ('{1}') defines keys." + + + + + A string like "EntityType '{0}' has no key defined. Define the key for this EntityType." + + + + + A string like "NavigationProperty is not valid. Role '{0}' or Role '{1}' is not defined in Relationship '{2}'." + + + + + A string like "End '{0}' on relationship '{1}' cannot have an operation specified because its multiplicity is '*'. Operations cannot be specified on ends with multiplicity '*'." + + + + + A string like "Each Name and PluralName in a relationship must be unique. '{0}' is already defined." + + + + + A string like "In relationship '{0}', the Principal and Dependent Role of the referential constraint refer to the same Role in the relationship type." + + + + + A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Valid values for multiplicity for the Principal Role are '0..1' or '1'." + + + + + A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Because all the properties in the Dependent Role are nullable, multiplicity of the Principal Role must be '0..1'." + + + + + A string like "Multiplicity conflicts with the referential constraint in Role '{0}' in relationship '{1}'. Because at least one of the properties in the Dependent Role is non-nullable, multiplicity of the Principal Role must be '1'." + + + + + A string like "Multiplicity conflicts with the referential constraint in Role '{0}' in relationship '{1}'. Because all of the properties in the Dependent Role are non-nullable, multiplicity of the Principal Role must be '1'." + + + + + A string like "Properties referred by the Dependent Role '{0}' must be a subset of the key of the EntityType '{1}' referred to by the Dependent Role in the referential constraint for relationship '{2}'." + + + + + A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Because the Dependent Role refers to the key properties, the upper bound of the multiplicity of the Dependent Role must be '1'." + + + + + A string like "Multiplicity is not valid in Role '{0}' in relationship '{1}'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'." + + + + + A string like "The types of all properties in the Dependent Role of a referential constraint must be the same as the corresponding property types in the Principal Role. The type of property '{0}' on entity '{1}' does not match the type of property '{2}' on entity '{3}' in the referential constraint '{4}'." + + + + + A string like "There is no property with name '{0}' defined in the type referred to by Role '{1}'." + + + + + A string like "A nullable ComplexType is not supported. Property '{0}' must not allow nulls." + + + + + A string like "A property cannot be of type '{0}'. The property type must be a ComplexType or a PrimitiveType." + + + + + A string like "Each member name in an EntityContainer must be unique. A member with name '{0}' is already defined." + + + + + A string like "Each type name in a schema must be unique. Type name '{0}' is already defined." + + + + + A string like "Name '{0}' cannot be used in type '{1}'. Member names cannot be the same as their enclosing type." + + + + + A string like "Each property name in a type must be unique. Property name '{0}' is already defined." + + + + + A string like "A cycle was detected in the type hierarchy of '{0}'." + + + + + A string like "A property cannot be of type '{0}'. The property type must be a ComplexType, a PrimitiveType, or a CollectionType." + + + + + A string like "The specified name must not be longer than 480 characters: '{0}'." + + + + + A string like "The specified name is not allowed: '{0}'." + + + + + A string like "The field {0} must be a string or array type with a maximum length of '{1}'." + + + + + A string like "The field {0} must be a string or array type with a minimum length of '{1}'." + + + + + A string like "No connection string named '{0}' could be found in the application config file." + + + + + A string like "AutomaticMigration" + + + + + A string like "BootstrapMigration" + + + + + A string like "InitialCreate" + + + + + A string like "Automatic migration was not applied because it would result in data loss." + + + + + A string like "[Inserting migration history record]" + + + + + A string like "[Deleting migration history record]" + + + + + A string like "[Updating EdmMetadata model hash]" + + + + + A string like "Running Seed method." + + + + + A string like "No pending explicit migrations." + + + + + A string like "Explicit" + + + + + A string like "Upgrading history table." + + + + + A string like "Cannot scaffold the next migration because the target database was created with a version of Code First earlier than EF 4.3 and does not contain the migrations history table. To start using migrations against this database, ensure the current model is compatible with the target database and execute the migrations Update process. (In Visual Studio you can use the Update-Database command from Package Manager Console to execute the migrations Update process)." + + + + + A string like "Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration." + + + + + A string like "Scripting the downgrade between two specified migrations is not supported." + + + + + A string like "Direct column renaming is not supported by SQL Server Compact. To rename a column in SQL Server Compact, you will need to recreate it." + + + + + A string like "One or more validation errors were detected during model generation:" + + + + + A string like "A circular ComplexType hierarchy was detected. Self-referencing ComplexTypes are not supported." + + + + + A string like "Connection to the database failed. The connection string is configured with an invalid LocalDB server name. This may have been set in 'global.asax' by a pre-release version of MVC4. The default connection factory is now set in web.config so the line in 'global.asax' starting with 'Database.DefaultConnectionFactory = ' should be removed. See http://go.microsoft.com/fwlink/?LinkId=243166 for details." + + + + + A string like "An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct." + + + + + A string like "Setting IsModified to false for a modified property is not supported." + + + + + A string like "An error occurred while saving entities that do not expose foreign key properties for their relationships. The EntityEntries property will return null because a single entity cannot be identified as the source of the exception. Handling of exceptions while saving can be made easier by exposing foreign key properties in your entity types. See the InnerException for details." + + + + + A string like "The set of property value names is read-only." + + + + + A string like "A property of a complex type must be set to an instance of the generic or non-generic DbPropertyValues class for that type." + + + + + A string like "Model compatibility cannot be checked because the DbContext instance was not created using Code First patterns. DbContext instances created from an ObjectContext or using an EDMX file cannot be checked for compatibility." + + + + + A string like "Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations." + + + + + A string like "The context cannot be used while the model is being created." + + + + + A string like "The DbContext class cannot be used with models that have multiple entity sets per type (MEST)." + + + + + A string like "The operation cannot be completed because the DbContext has been disposed." + + + + + A string like "The provider factory returned a null connection." + + + + + A string like "The DbConnectionFactory instance returned a null connection." + + + + + A string like "The number of primary key values passed must match number of primary key values defined on the entity." + + + + + A string like "The type of one of the primary key values did not match the type defined in the entity. See inner exception for details." + + + + + A string like "Multiple entities were found in the Added state that match the given primary key values." + + + + + A string like "Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList()." + + + + + A string like "The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties." + + + + + A string like "Cannot initialize a DbContext from an entity connection string or an EntityConnection instance together with a DbCompiledModel. If an entity connection string or EntityConnection instance is used, then the model will be created from the metadata in the connection. If a DbCompiledModel is used, then the connection supplied should be a standard database connection (for example, a SqlConnection instance) rather than an entity connection." + + + + + A string like "Using the same DbCompiledModel to create contexts against different types of database servers is not supported. Instead, create a separate DbCompiledModel for each type of server being used." + + + + + A string like "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details." + + + + + A string like "An exception occurred while initializing the database. See the InnerException for details." + + + + + A string like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using an existing ObjectContext is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel." + + + + + A string like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using Database First or Model First is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel." + + + + + A string like "Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception." + + + + + A string like "NavigationProperty is not valid. The FromRole and ToRole are the same." + + + + + A string like "OnDelete can be specified on only one End of an EdmAssociation." + + + + + A string like "The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical." + + + + + A string like "The name is missing or not valid." + + + + + A string like "AssociationEnd must not be null." + + + + + A string like "DependentEnd must not be null." + + + + + A string like "DependentProperties must not be empty." + + + + + A string like "Association must not be null." + + + + + A string like "ResultEnd must not be null." + + + + + A string like "EntityType must not be null." + + + + + A string like "ElementType must not be null." + + + + + A string like "ElementType must not be null." + + + + + A string like "SourceSet must not be null." + + + + + A string like "TargetSet must not be null." + + + + + A string like "The type is not a valid EdmTypeReference." + + + + + A string like "Serializer can only serialize an EdmModel that has one EdmNamespace and one EdmEntityContainer." + + + + + A string like "MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length." + + + + + A string like "MinLengthAttribute must have a Length value that is zero or greater." + + + + + A string like "The connection can not be overridden because this context was created from an existing ObjectContext." + + + + + A string like "Can not override the connection for this context with a standard DbConnection because the original connection was an EntityConnection." + + + + + A string like "Can not override the connection for this context with an EntityConnection because the original connection was a standard DbConnection." + + + + + Strongly-typed and parameterized exception factory. + + + + + Migrations.Infrastructure.AutomaticDataLossException with message like "Automatic migration was not applied because it would result in data loss." + + + + + Migrations.Infrastructure.MigrationsException with message like "Cannot scaffold the next migration because the target database was created with a version of Code First earlier than EF 4.3 and does not contain the migrations history table. To start using migrations against this database, ensure the current model is compatible with the target database and execute the migrations Update process. (In Visual Studio you can use the Update-Database command from Package Manager Console to execute the migrations Update process)." + + + + + Migrations.Infrastructure.MigrationsException with message like "The specified target migration '{0}' does not exist. Ensure that target migration refers to an existing migration id." + + + + + Migrations.Infrastructure.MigrationsException with message like "The Foreign Key on table '{0}' with columns '{1}' could not be created because the principal key columns could not be determined. Use the AddForeignKey fluent API to fully specify the Foreign Key." + + + + + Migrations.Infrastructure.MigrationsException with message like "'{0}' is not a valid target migration. When targeting a previously applied automatic migration, use the full migration id including timestamp." + + + + + Migrations.Infrastructure.MigrationsException with message like "'{0}' is not a valid migration. Explicit migrations must be used for both source and target when scripting the upgrade between them." + + + + + Migrations.Infrastructure.MigrationsException with message like "The target context '{0}' is not constructible. Add a default constructor or provide an implementation of IDbContextFactory." + + + + + Migrations.Infrastructure.MigrationsException with message like "The specified migration name '{0}' is ambiguous. Specify the full migration id including timestamp instead." + + + + + Migrations.Infrastructure.AutomaticMigrationsDisabledException with message like "Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration." + + + + + Migrations.Infrastructure.MigrationsException with message like "Scripting the downgrade between two specified migrations is not supported." + + + + + Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' was not be found in the assembly '{1}'." + + + + + Migrations.Infrastructure.MigrationsException with message like "More than one migrations configuration type '{0}' was found in the assembly '{1}'. Specify the fully qualified name of the one to use." + + + + + Migrations.Infrastructure.MigrationsException with message like "No migrations configuration type was found in the assembly '{0}'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration)." + + + + + Migrations.Infrastructure.MigrationsException with message like "More than one migrations configuration type was found in the assembly '{0}'. Specify the name of the one to use." + + + + + Migrations.Infrastructure.MigrationsException with message like "The type '{0}' is not a migrations configuration type." + + + + + Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' must have a public default constructor." + + + + + Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' must not be abstract." + + + + + Migrations.Infrastructure.MigrationsException with message like "The migrations configuration type '{0}' must not be generic." + + + + + Migrations.Infrastructure.MigrationsException with message like "Direct column renaming is not supported by SQL Server Compact. To rename a column in SQL Server Compact, you will need to recreate it." + + + + + Migrations.Infrastructure.MigrationsException with message like "In VB.NET projects, the migrations namespace '{0}' must be under the root namespace '{1}'. Update the migrations project's root namespace to allow classes under the migrations namespace to be added." + + + + + + ArgumentException with message like "The argument '{0}' cannot be null, empty or contain only white space." + + + + + ArgumentException with message like "The argument property '{0}' cannot be null." + + + + + ArgumentException with message like "The precondition '{0}' failed. {1}" + + + + + InvalidOperationException with message like "The type '{0}' has already been configured as a complex type. It cannot be reconfigured as an entity type." + + + + + InvalidOperationException with message like "The type '{0}' has already been configured as an entity type. It cannot be reconfigured as a complex type." + + + + + InvalidOperationException with message like "The key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property." + + + + + InvalidOperationException with message like "The foreign key component '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property." + + + + + InvalidOperationException with message like "The property '{0}' is not a declared property on type '{1}'. Verify that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation. Make sure that it is a valid primitive property." + + + + + InvalidOperationException with message like "The navigation property '{0}' is not a declared property on type '{1}'. Verify that it has not been explicitly excluded from the model and that it is a valid navigation property." + + + + + InvalidOperationException with message like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'." + + + + + InvalidOperationException with message like "The expression '{0}' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. Use dotted paths for nested properties: C#: 't => t.MyProperty.MyProperty' VB.Net: 'Function(t) t.MyProperty.MyProperty'." + + + + + InvalidOperationException with message like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New From {{ t.MyProperty1, t.MyProperty2 }}'." + + + + + InvalidOperationException with message like "The properties expression '{0}' is not valid. The expression should represent a property: C#: 't => t.MyProperty' VB.Net: 'Function(t) t.MyProperty'. When specifying multiple properties use an anonymous type: C#: 't => new {{ t.MyProperty1, t.MyProperty2 }}' VB.Net: 'Function(t) New From {{ t.MyProperty1, t.MyProperty2 }}'." + + + + + + InvalidOperationException with message like "Conflicting configuration settings were specified for property '{0}' on type '{1}': {2}" + + + + + InvalidOperationException with message like "Conflicting configuration settings were specified for column '{0}' on table '{1}': {2}" + + + + + InvalidOperationException with message like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from ComplexObject." + + + + + InvalidOperationException with message like "The type '{0}' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive, nested or generic, and does not inherit from EntityObject." + + + + + InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' cannot be the inverse of itself." + + + + + InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting foreign keys." + + + + + MappingException with message like "Values of incompatible types ('{1}' and '{2}') were assigned to the '{0}' discriminator column. Values of the same type must be specified. To explicitly specify the type of the discriminator column use the HasColumnType method." + + + + + InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting mapping information." + + + + + InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting cascade delete operations using 'WillCascadeOnDelete'." + + + + + InvalidOperationException with message like "The navigation property '{0}' declared on type '{1}' has been configured with conflicting multiplicities." + + + + + InvalidOperationException with message like "The MaxLengthAttribute on property '{0}' on type '{1} is not valid. The Length value must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length." + + + + + InvalidOperationException with message like "The StringLengthAttribute on property '{0}' on type '{1}' is not valid. The maximum length must be greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length." + + + + + InvalidOperationException with message like "Unable to determine composite primary key ordering for type '{0}'. Use the ColumnAttribute or the HasKey method to specify an order for composite primary keys." + + + + + InvalidOperationException with message like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. Name must not be empty." + + + + + InvalidOperationException with message like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The foreign key name '{2}' was not found on the dependent type '{3}'. The Name value should be a comma separated list of foreign key property names." + + + + + InvalidOperationException with message like "The ForeignKeyAttribute on property '{0}' on type '{1}' is not valid. The navigation property '{2}' was not found on the dependent type '{1}'. The Name value should be a valid navigation property name." + + + + + InvalidOperationException with message like "Unable to determine a composite foreign key ordering for foreign key on type {0}. When using the ForeignKey data annotation on composite foreign key properties ensure order is specified by using the Column data annotation or the fluent API." + + + + + InvalidOperationException with message like "The InversePropertyAttribute on property '{2}' on type '{3}' is not valid. The property '{0}' is not a valid navigation property on the related type '{1}'. Ensure that the property exists and is a valid reference or collection navigation property." + + + + + InvalidOperationException with message like "A relationship cannot be established from property '{0}' on type '{1}' to property '{0}' on type '{1}'. Check the values in the InversePropertyAttribute to ensure relationship definitions are unique and reference from one navigation property to its corresponding inverse navigation property." + + + + + InvalidOperationException with message like "A key is registered for the derived type '{0}'. Keys can only be registered for the root type '{1}'." + + + + + InvalidOperationException with message like "The type '{0}' has already been mapped to table '{1}'. Specify all mapping aspects of a table in a single Map call." + + + + + InvalidOperationException with message like "Map was called more than once for type '{0}' and at least one of the calls didn't specify the target table name." + + + + + InvalidOperationException with message like "The derived type '{0}' has already been mapped using the chaining syntax. A derived type can only be mapped once using the chaining syntax." + + + + + InvalidOperationException with message like "An "is not null" condition cannot be specified on property '{0}' on type '{1}' because this property is not included in the model. Check that the property has not been explicitly excluded from the model by using the Ignore method or NotMappedAttribute data annotation." + + + + + ArgumentException with message like "Values of type '{0}' cannot be used as type discriminator values. Supported types include byte, signed byte, bool, int16, int32, int64, and string." + + + + + InvalidOperationException with message like "Unable to add the convention '{0}'. Could not find an existing convention of type '{1}' in the current convention set." + + + + + InvalidOperationException with message like "Not all properties for type '{0}' have been mapped. Either map those properties or explicitly excluded them from the model." + + + + + NotSupportedException with message like "Unable to determine the provider name for connection of type '{0}'." + + + + + ArgumentException with message like "The qualified table name '{0}' contains an invalid schema name. Schema names must have a non-zero length." + + + + + ArgumentException with message like "The qualified table name '{0}' contains an invalid table name. Table names must have a non-zero length." + + + + + InvalidOperationException with message like "Properties for type '{0}' can only be mapped once. Ensure the MapInheritedProperties method is only used during one call to the Map method." + + + + + InvalidOperationException with message like "Properties for type '{0}' can only be mapped once. Ensure the Properties method is used and that repeated calls specify each non-key property only once." + + + + + InvalidOperationException with message like "Properties for type '{0}' can only be mapped once. The non-key property '{1}' is mapped more than once. Ensure the Properties method specifies each non-key property only once." + + + + + InvalidOperationException with message like "The property '{1}' on type '{0}' cannot be mapped because it has been explicitly excluded from the model." + + + + + InvalidOperationException with message like "The entity types '{0}' and '{1}' cannot share table '{2}' because they are not in the same type hierarchy or do not have a valid one to one foreign key relationship with matching primary keys between them." + + + + + InvalidOperationException with message like "The property '{0}' cannot be used as a key property on the entity '{1}' because the property type is not a valid key type. Only scalar types, string and byte[] are supported key types." + + + + + InvalidOperationException with message like "The specified table '{0}' was not found in the model. Ensure that the table name has been correctly specified." + + + + + InvalidOperationException with message like "The specified association foreign key columns '{0}' are invalid. The number of columns specified must match the number of primary key columns." + + + + + InvalidOperationException with message like "A circular ComplexType hierarchy was detected. Self-referencing ComplexTypes are not supported." + + + + + InvalidOperationException with message like "Unable to determine the principal end of an association between the types '{0}' and '{1}'. The principal end of this association must be explicitly configured using either the relationship fluent API or data annotations." + + + + + InvalidOperationException with message like "The abstract type '{0}' has no mapped descendents and so cannot be mapped. Either remove '{0}' from the model or add one or more types deriving from '{0}' to the model. " + + + + + NotSupportedException with message like "The type '{0}' cannot be mapped as defined because it maps inherited properties from types that use entity splitting or another form of inheritance. Either choose a different inheritance mapping strategy so as to not map inherited properties, or change all types in the hierarchy to map inherited properties and to not use splitting. " + + + + + InvalidOperationException with message like "Cannot get value for property '{0}' from entity of type '{1}' because the property has no get accessor." + + + + + InvalidOperationException with message like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor." + + + + + + NotSupportedException with message like "Cannot set value for property '{0}' on entity of type '{1}' because the property has no set accessor and is in the '{2}' state." + + + + + InvalidOperationException with message like "Member '{0}' cannot be called for property '{1}' on entity of type '{2}' because the property is not part of the Entity Data Model." + + + + + + ArgumentException with message like "Cannot call the {0} method for an entity of type '{1}' on a DbSet for entities of type '{2}'. Only entities of type '{2}' or derived from type '{2}' can be added, attached, or removed." + + + + + ArgumentException with message like "Cannot call the Create method for the type '{0}' on a DbSet for entities of type '{1}'. Only entities of type '{1}' or derived from type '{1}' can be created." + + + + + + + ArgumentException with message like "The property '{0}' on type '{1}' is a collection navigation property. The Collection method should be used instead of the Reference method." + + + + + ArgumentException with message like "The property '{0}' on type '{1}' is a reference navigation property. The Reference method should be used instead of the Collection method." + + + + + ArgumentException with message like "The property '{0}' on type '{1}' is not a navigation property. The Reference and Collection methods can only be used with navigation properties. Use the Property or ComplexProperty method." + + + + + ArgumentException with message like "The property '{0}' on type '{1}' is not a primitive or complex property. The Property method can only be used with primitive or complex properties. Use the Reference or Collection method." + + + + + ArgumentException with message like "The property '{0}' on type '{1}' is not a complex property. The ComplexProperty method can only be used with complex properties. Use the Property, Reference or Collection method." + + + + + ArgumentException with message like "The property '{0}' on type '{1}' is not a primitive property, complex property, collection navigation property, or reference navigation property." + + + + + ArgumentException with message like ""The property '{0}' from the property path '{1}' is not a complex property on type '{2}'. Property paths must be composed of complex properties for all except the final property."" + + + + + ArgumentException with message like ""The property path '{0}' cannot be used for navigation properties. Property paths can only be used to access primitive or complex properties."" + + + + + ArgumentException with message like "The navigation property '{0}' on entity type '{1}' cannot be used for entities of type '{2}' because it refers to entities of type '{3}'." + + + + + ArgumentException with message like "The generic type argument '{0}' cannot be used with the Member method when accessing the collection navigation property '{1}' on entity type '{2}'. The generic type argument '{3}' must be used instead." + + + + + ArgumentException with message like "The property '{0}' on entity type '{1}' cannot be used for objects of type '{2}' because it is a property for objects of type '{3}'." + + + + + NotSupportedException with message like "Setting IsModified to false for a modified property is not supported." + + + + + ArgumentException with message like "The expression passed to method {0} must represent a property defined on the type '{1}'." + + + + + InvalidOperationException with message like "{0} cannot be used for entities in the {1} state." + + + + + InvalidOperationException with message like "Cannot set non-nullable property '{0}' of type '{1}' to null on object of type '{2}'." + + + + + InvalidOperationException with message like "The property '{0}' in the entity of type '{1}' is null. Store values cannot be obtained for an entity with a null complex property." + + + + + InvalidOperationException with message like "Cannot assign value of type '{0}' to property '{1}' of type '{2}' in property values for type '{3}'." + + + + + NotSupportedException with message like "The set of property value names is read-only." + + + + + ArgumentException with message like "The '{0}' property does not exist or is not mapped for the type '{1}'." + + + + + ArgumentException with message like "Cannot copy values from DbPropertyValues for type '{0}' into DbPropertyValues for type '{1}'." + + + + + ArgumentException with message like "Cannot copy from property values for object of type '{0}' into property values for object of type '{1}'." + + + + + ArgumentException with message like "A property of a complex type must be set to an instance of the generic or non-generic DbPropertyValues class for that type." + + + + + InvalidOperationException with message like "The value of the complex property '{0}' on entity of type '{1}' is null. Complex properties cannot be set to null and values cannot be set for null complex properties." + + + + + InvalidOperationException with message like "The value of the nested property values property '{0}' on the values for entity of type '{1}' is null. Nested property values cannot be set to null and values cannot be set for null complex properties." + + + + + InvalidOperationException with message like "The model backing the '{0}' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269)." + + + + + InvalidOperationException with message like "Database '{0}' cannot be created because it already exists." + + + + + NotSupportedException with message like "Model compatibility cannot be checked because the DbContext instance was not created using Code First patterns. DbContext instances created from an ObjectContext or using an EDMX file cannot be checked for compatibility." + + + + + NotSupportedException with message like "Model compatibility cannot be checked because the database does not contain model metadata. Model compatibility can only be checked for databases created using Code First or Code First Migrations." + + + + + + + InvalidOperationException with message like "Failed to set database initializer of type '{0}' for DbContext type '{1}' specified in the application configuration. See inner exception for details." + + + + + InvalidOperationException with message like "Configuration for DbContext type '{0}' is specified multiple times in the application configuration. Each context can only be configured once." + + + + + InvalidOperationException with message like "Failed to set Database.DefaultConnectionFactory to an instance of the '{0}' type as specified in the application configuration. See inner exception for details." + + + + + InvalidOperationException with message like "The type '{0}' could not be found. The type name must be an assembly-qualified name." + + + + + InvalidOperationException with message like "The context cannot be used while the model is being created." + + + + + InvalidOperationException with message like "The DbContext class cannot be used with models that have multiple entity sets per type (MEST)." + + + + + InvalidOperationException with message like "The operation cannot be completed because the DbContext has been disposed." + + + + + InvalidOperationException with message like "The provider factory returned a null connection." + + + + + InvalidOperationException with message like "The connection string '{0}' in the application's configuration file does not contain the required providerName attribute."" + + + + + InvalidOperationException with message like "The DbConnectionFactory instance returned a null connection." + + + + + ArgumentException with message like "The number of primary key values passed must match number of primary key values defined on the entity." + + + + + ArgumentException with message like "The type of one of the primary key values did not match the type defined in the entity. See inner exception for details." + + + + + InvalidOperationException with message like "The entity found was of type {0} when an entity of type {1} was requested." + + + + + InvalidOperationException with message like "Multiple entities were found in the Added state that match the given primary key values." + + + + + InvalidOperationException with message like "The type '{0}' is mapped as a complex type. The Set method, DbSet objects, and DbEntityEntry objects can only be used with entity types, not complex types." + + + + + InvalidOperationException with message like "The type '{0}' is not attributed with EdmEntityTypeAttribute but is contained in an assembly attributed with EdmSchemaAttribute. POCO entities that do not use EdmEntityTypeAttribute cannot be contained in the same assembly as non-POCO entities that use EdmEntityTypeAttribute." + + + + + InvalidOperationException with message like "The entity type {0} is not part of the model for the current context." + + + + + NotSupportedException with message like "Data binding directly to a store query (DbSet, DbQuery, DbSqlQuery) is not supported. Instead populate a DbSet with data, for example by calling Load on the DbSet, and then bind to local data. For WPF bind to DbSet.Local. For WinForms bind to DbSet.Local.ToBindingList()." + + + + + ArgumentException with message like "The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties." + + + + + InvalidOperationException with message like "No connection string named '{0}' could be found in the application config file." + + + + + InvalidOperationException with message like "Cannot initialize a DbContext from an entity connection string or an EntityConnection instance together with a DbCompiledModel. If an entity connection string or EntityConnection instance is used, then the model will be created from the metadata in the connection. If a DbCompiledModel is used, then the connection supplied should be a standard database connection (for example, a SqlConnection instance) rather than an entity connection." + + + + + NotSupportedException with message like "The collection navigation property '{0}' on the entity of type '{1}' cannot be set because the entity type does not define a navigation property with a set accessor." + + + + + NotSupportedException with message like "Using the same DbCompiledModel to create contexts against different types of database servers is not supported. Instead, create a separate DbCompiledModel for each type of server being used." + + + + + InvalidOperationException with message like "Multiple object sets per type are not supported. The object sets '{0}' and '{1}' can both contain instances of type '{2}'." + + + + + InvalidOperationException with message like "The context type '{0}' must have a public constructor taking an EntityConnection." + + + + + NotSupportedException with message like "The database name '{0}' is not supported because it is an MDF file name. A full connection string must be provided to attach an MDF file." + + + + + DataException with message like "An exception occurred while initializing the database. See the InnerException for details." + + + + + NotSupportedException with message like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using an existing ObjectContext is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel." + + + + + NotSupportedException with message like "Creating a DbModelBuilder or writing the EDMX from a DbContext created using Database First or Model First is not supported. EDMX can only be obtained from a Code First DbContext created without using an existing DbCompiledModel." + + + + + InvalidOperationException with message like "The context factory type '{0}' must have a public default constructor." + + + + + InvalidOperationException with message like "MaxLengthAttribute must have a Length value that is greater than zero. Use MaxLength() without parameters to indicate that the string or array can have the maximum allowable length." + + + + + InvalidOperationException with message like "MinLengthAttribute must have a Length value that is zero or greater." + + + + + InvalidOperationException with message like "No connection string named '{0}' could be found in the application config file." + + + + + InvalidOperationException with message like "The connection can not be overridden because this context was created from an existing ObjectContext." + + + + + InvalidOperationException with message like "Can not override the connection for this context with a standard DbConnection because the original connection was an EntityConnection." + + + + + InvalidOperationException with message like "Can not override the connection for this context with an EntityConnection because the original connection was a standard DbConnection." + + + + + The exception that is thrown when a null reference (Nothing in Visual Basic) is passed to a method that does not accept it as a valid argument. + + + + + The exception that is thrown when the value of an argument is outside the allowable range of values as defined by the invoked method. + + + + + The exception that is thrown when the author has yet to implement the logic at this point in the program. This can act as an exception based TODO tag. + + + + + The exception that is thrown when an invoked method is not supported, or when there is an attempt to read, seek, or write to a stream that does not support the invoked functionality. + + + + + AutoGenerated resource class. Usage: + + string s = EntityRes.GetString(EntityRes.MyIdenfitier); + + + + + Provider to convert provider agnostic migration operations into SQL commands + that can be run against Microsoft SQL Server Compact Edition. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Represents the configuration for a specific context type + + + + + Code Contracts hook methods - Called when contracts fail. Here we detect the most common preconditions + so we can throw the correct exceptions. It also means that we can write preconditions using the + simplest Contract.Requires() form. + + + + + Convention to configure integer primary keys to be identity. + + + + + Convention to move primary key properties to appear first. + + + + + Convention to convert any data types that were explicitly specified, via data annotations or API, + to be lower case. The default SqlClient provider is case sensitive and requires data types to be lower case. This convention + allows the and API to be case insensitive. + + + + + Convention to configure a type as a complex type if it has no primary key, no mapped base type and no navigation properties. + + + + + Convention to process instances of found on properties in the model. + + + + + Configures a relationship that can support foreign key properties that are exposed in the object model. + This configuration functionality is available via the Code First Fluent API, see . + + The dependent entity type. + + + + Configures a relationship that can only support foreign key properties that are not exposed in the object model. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures a relationship that can support cascade on delete functionality. + + + + + Configures cascade delete to be on for the relationship. + + + + + Configures whether or not cascade delete is on for the relationship. + + Value indicating if cascade delete is on or not. + + + + Configures the relationship to use foreign key property(s) that are not exposed in the object model. + The column(s) and table can be customized by specifying a configuration action. + If an empty configuration action is specified then column name(s) will be generated by convention. + If foreign key properties are exposed in the object model then use the HasForeignKey method. + Not all relationships support exposing foreign key properties in the object model. + + Action that configures the foreign key column(s) and table. + + A configuration object that can be used to further configure the relationship. + + + + + Configures the relationship to use foreign key property(s) that are exposed in the object model. + If the foreign key property(s) are not exposed in the object model then use the Map method. + + The type of the key. + + A lambda expression representing the property to be used as the foreign key. + If the foreign key is made up of multiple properties then specify an anonymous type including the properties. + When using multiple foreign key properties, the properties must be specified in the same order that the + the primary key properties were configured for the principal entity type. + + A configuration object that can be used to further configure the relationship. + + + + Configures a many relationship from an entity type. + + The entity type that the relationship originates from. + The entity type that the relationship targets. + + + + Configures the relationship to be many:many with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be many:many without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be many:required with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be many:required without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be many:optional with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be many:optional without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + An instance of this internal class is created whenever an instance of the public + class is needed. This allows the public surface to be non-generic, while the runtime type created + still implements . + + The type of the element. + + + + Creates a new query that will be backed by the given internal query object. + + The backing query. + + + + See comments in . + + + + + See comments in . + + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + Gets the underlying internal query object. + + The internal query. + + + + A LINQ expression visitor that finds uses with equivalent + instances. + + + + + Replaces calls to DbContext.Set() with an expression for the equivalent . + + The node to replace. + A new node, which may have had the replacement made. + + + + Replaces a or property with a constant expression + for the underlying . + + The node to replace. + A new node, which may have had the replacement made. + + + + Processes the fields in each constant expression and replaces instances with + the underlying ObjectQuery instance. This handles cases where the query has a closure + containing values. + + + + + Gets a value from the given member, or returns null + if the member doesn't contain a DbContext instance. + + The expression for the object for the member, which may be null for a static member. + The member. + The context or null. + + + + Gets the instance from the given instance or static member, returning null + if the member does not contain a DbContext instance. + + The member. + The value of the object to get the instance from, or null if the member is static. + The context instance or null. + + + + Takes a or and creates an expression + for the underlying . + + + + + Takes a or and extracts the underlying . + + + + + Helper class that extends Tuple to give the Item1 and Item2 properties more meaningful names. + + + + + Creates a new pair of the given database initializer delegate and a flag + indicating whether or not it is locked. + + + + + The initializer delegate. + + + + + A flag indicating whether or not the initializer is locked and should not be changed. + + + + + This convention causes DbModelBuilder to include metadata about the model + when it builds the model. When creates a model by convention it will + add this convention to the list of those used by the DbModelBuilder. This will then result in + model metadata being written to the database if the DbContext is used to create the database. + This can then be used as a quick check to see if the model has changed since the last time it was + used against the database. + This convention can be removed from the conventions by overriding + the OnModelCreating method on a derived DbContext class. + + + + + Adds metadata to the given model configuration. + + The model configuration. + + + + Instances of this class provide access to information about and control of entities that + are being tracked by the . Use the Entity or Entities methods of + the context to obtain objects of this type. + + The type of the entity. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Queries the database for copies of the values of the tracked entity as they currently exist in the database. + Note that changing the values in the returned dictionary will not update the values in the database. + If the entity is not found in the database then null is returned. + + The store values. + + + + Reloads the entity from the database overwriting any property values with values from the database. + The entity will be in the Unchanged state after calling this method. + + + + + Gets an object that represents the reference (i.e. non-collection) navigation property from this + entity to another entity. + + The name of the navigation property. + An object representing the navigation property. + + + + Gets an object that represents the reference (i.e. non-collection) navigation property from this + entity to another entity. + + The type of the property. + The name of the navigation property. + An object representing the navigation property. + + + + Gets an object that represents the reference (i.e. non-collection) navigation property from this + entity to another entity. + + The type of the property. + An expression representing the navigation property. + An object representing the navigation property. + + + + Gets an object that represents the collection navigation property from this + entity to a collection of related entities. + + The name of the navigation property. + An object representing the navigation property. + + + + Gets an object that represents the collection navigation property from this + entity to a collection of related entities. + + The type of elements in the collection. + The name of the navigation property. + An object representing the navigation property. + + + + Gets an object that represents the collection navigation property from this + entity to a collection of related entities. + + The type of elements in the collection. + An expression representing the navigation property. + An object representing the navigation property. + + + + Gets an object that represents a scalar or complex property of this entity. + + The name of the property. + An object representing the property. + + + + Gets an object that represents a scalar or complex property of this entity. + + The type of the property. + The name of the property. + An object representing the property. + + + + Gets an object that represents a scalar or complex property of this entity. + + The type of the property. + An expression representing the property. + An object representing the property. + + + + Gets an object that represents a complex property of this entity. + + The name of the complex property. + An object representing the complex property. + + + + Gets an object that represents a complex property of this entity. + + The type of the complex property. + The name of the complex property. + An object representing the complex property. + + + + Gets an object that represents a complex property of this entity. + + The type of the complex property. + An expression representing the complex property. + An object representing the complex property. + + + + Gets an object that represents a member of the entity. The runtime type of the returned object will + vary depending on what kind of member is asked for. The currently supported member types and their return + types are: + Reference navigation property: . + Collection navigation property: . + Primitive/scalar property: . + Complex property: . + + The name of the member. + An object representing the member. + + + + Gets an object that represents a member of the entity. The runtime type of the returned object will + vary depending on what kind of member is asked for. The currently supported member types and their return + types are: + Reference navigation property: . + Collection navigation property: . + Primitive/scalar property: . + Complex property: . + + The type of the member. + The name of the member. + An object representing the member. + + + + Returns a new instance of the non-generic class for + the tracked entity represented by this object. + + A non-generic version. + + + + Validates this instance and returns validation result. + + + Entity validation result. Possibly null if + method is overridden. + + + + + Determines whether the specified is equal to this instance. + Two instances are considered equal if they are both entries for + the same entity on the same . + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + Two instances are considered equal if they are both entries for + the same entity on the same . + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the entity. + + The entity. + + + + Gets or sets the state of the entity. + + The state. + + + + Gets the current property values for the tracked entity represented by this object. + + The current values. + + + + Gets the original property values for the tracked entity represented by this object. + The original values are usually the entity's property values as they were when last queried from + the database. + + The original values. + + + + Returned by the Configuration method of to provide access to configuration + options for the context. + + + + + Initializes a new instance of the class. + + The internal context. + + + + Gets or sets a value indicating whether lazy loading of relationships exposed as + navigation properties is enabled. Lazy loading is enabled by default. + + true if lazy loading is enabled; otherwise, false. + + + + Gets or sets a value indicating whether or not the framework will create instances of + dynamically generated proxy classes whenever it creates an instance of an entity type. + Note that even if proxy creation is enabled with this flag, proxy instances will only + be created for entity types that meet the requirements for being proxied. + Proxy creation is enabled by default. + + true if proxy creation is enabled; otherwise, false. + + + + + Gets or sets a value indicating whether tracked entities should be validated automatically when + is invoked. + The default value is true. + + + + + An immutable representation of an Entity Data Model (EDM) model that can be used to create an + or can be passed to the constructor of a . + For increased performance, instances of this type should be cached and re-used to construct contexts. + + + + + For mocking. + + + + + Creates a model for the given EDM metadata model. + + The EDM metadata model. + + + + Creates an instance of ObjectContext or class derived from ObjectContext. Note that an instance + of DbContext can be created instead by using the appropriate DbContext constructor. + If a derived ObjectContext is used, then it must have a public constructor with a single + EntityConnection parameter. + The connection passed is used by the ObjectContext created, but is not owned by the context. The caller + must dispose of the connection once the context has been disposed. + + The type of context to create. + An existing connection to a database for use by the context. + + + + + Gets a cached delegate (or creates a new one) used to call the constructor for the given derived ObjectContext type. + + + + + A snapshot of the that was used to create this compiled model. + + + + + The provider info (provider name and manifest token) that was used to create this model. + + + + + A non-generic version of which can be used when the type of entity + is not known at build time. + + + + + An internal interface implemented by and that allows access to + the internal set without using reflection. + + + + + The underlying internal set. + + + + + Internal constructor prevents external classes deriving from DbSet. + + + + + Finds an entity with the given primary key values. + If an entity with the given primary key values exists in the context, then it is + returned immediately without making a request to the store. Otherwise, a request + is made to the store for an entity with the given primary key values and this entity, + if found, is attached to the context and returned. If no entity is found in the + context or the store, then null is returned. + + + The ordering of composite key values is as defined in the EDM, which is in turn as defined in + the designer, by the Code First fluent API, or by the DataMember attribute. + + The values of the primary key for the entity to be found. + The entity found, or null. + Thrown if multiple entities exist in the context with the primary key values given. + Thrown if the type of entity is not part of the data model for this context. + Thrown if the types of the key values do not match the types of the key values for the entity type to be found. + Thrown if the context has been disposed. + + + + Attaches the given entity to the context underlying the set. That is, the entity is placed + into the context in the Unchanged state, just as if it had been read from the database. + + The entity to attach. + The entity. + + Attach is used to repopulate a context with an entity that is known to already exist in the database. + SaveChanges will therefore not attempt to insert an attached entity into the database because + it is assumed to already be there. + Note that entities that are already in the context in some other state will have their state set + to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state. + + + + + Adds the given entity to the context underlying the set in the Added state such that it will + be inserted into the database when SaveChanges is called. + + The entity to add. + The entity. + + Note that entities that are already in the context in some other state will have their state set + to Added. Add is a no-op if the entity is already in the context in the Added state. + + + + + Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges + is called. Note that the entity must exist in the context in some other state before this method + is called. + + The entity to remove. + The entity. + + Note that if the entity exists in the context in the Added state, then this method + will cause it to be detached from the context. This is because an Added entity is assumed not to + exist in the database such that trying to delete it does not make sense. + + + + + Creates a new instance of an entity for the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The entity instance, which may be a proxy. + + + + Creates a new instance of an entity for the type of this set or for a type derived + from the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The entity instance, which may be a proxy. + + + + Returns the equivalent generic object. + + The type of entity for which the set was created. + The generic set object. + + + + Creates a raw SQL query that will return entities in this set. By default, the + entities returned are tracked by the context; this can be changed by calling + AsNoTracking on the returned. + Note that the entities returned are always of the type for this set and never of + a derived type. If the table or tables queried may contain data for other entity + types, then the SQL query must be written appropriately to ensure that only entities of + the correct type are returned. + + The SQL query string. + The parameters to apply to the SQL query string. + A object that will execute the query when it is enumerated. + + + + Gets an that represents a local view of all Added, Unchanged, + and Modified entities in this set. This local view will stay in sync as entities are added or + removed from the context. Likewise, entities added to or removed from the local view will automatically + be added to or removed from the context. + + + This property can be used for data binding by populating the set with data, for example by using the Load + extension method, and then binding to the local data through this property. For WPF bind to this property + directly. For Windows Forms bind to the result of calling ToBindingList on this property + + The local view. + + + + The internal IQueryable that is backing this DbQuery + + + + + Gets the underlying internal set. + + The internal set. + + + + Data Model Validator + + + + + Validate the and all of its properties given certain version. + + The root of the model to be validated + True to validate the syntax, otherwise false + + + + Gets an value representing the association set that is being mapped. + + + + + Gets a value representing the table to which the entity type's properties are being mapped. + + + + + Gets the collection of s that specifies the constant or null values that columns in must have for this type mapping to apply. + + + + + Represents a column being added to a table. + + + + + Initializes a new instance of the AddColumnOperation class. + + The name of the table the column should be added to. + Details of the column being added. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table the column should be added to. + + + + + Gets the details of the column being added. + + + + + Gets an operation that represents dropping the added column. + + + + + + + + Base class for loggers that can be used for the migrations process. + + + + + Logs an informational message. + + The message to be logged. + + + + Logs a warning that the user should be made aware of. + + The message to be logged. + + + + Logs some additional information that should only be presented to the user if they request verbose output. + + The message to be logged. + + + + Helper class that is used by design time tools to run migrations related + commands that need to interact with an application that is being edited + in Visual Studio. + + Because the application is being edited the assemblies need to + be loaded in a separate AppDomain to ensure the latest version + is always loaded. + + The App/Web.config file from the startup project is also copied + to ensure that any configuration is applied. + + + + + Initializes a new instance of the ToolingFacade class. + + + The name of the assembly that contains the migrations configuration to be used. + + + The namespace qualified name of migrations configuration to be used. + + + The working directory containing the compiled assemblies. + + + The path of the config file from the startup project. + + + The path of the application data directory from the startup project. + Typically the App_Data directory for web applications or the working directory for executables. + + + The connection to the database to be migrated. + If null is supplied, the default connection for the context will be used. + + + + + Releases all unmanaged resources used by the facade. + + + + + Gets the fully qualified name of all types deriving from . + + All context types found. + + + + Gets a list of all migrations that have been applied to the database. + + Ids of applied migrations. + + + + Gets a list of all migrations that have not been applied to the database. + + Ids of pending migrations. + + + + Updates the database to the specified migration. + + + The Id of the migration to migrate to. + If null is supplied, the database will be updated to the latest migration. + + Value indicating if data loss during automatic migration is acceptable. + + + + Generates a SQL script to migrate between two migrations. + + + The migration to update from. + If null is supplied, a script to update the current database will be produced. + + + The migration to update to. + If null is supplied, a script to update to the latest migration will be produced. + + Value indicating if data loss during automatic migration is acceptable. + The generated SQL script. + + + + Scaffolds a code-based migration to apply any pending model changes. + + The name for the generated migration. + The programming language of the generated migration. + The root namespace of the project the migration will be added to. + Whether or not to include model changes. + The scaffolded migration. + + + + Scaffolds the initial code-based migration corresponding to a previously run database initializer. + + The programming language of the generated migration. + The root namespace of the project the migration will be added to. + The scaffolded migration. + + + + + + + Releases all resources used by the facade. + + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + + Gets or sets an action to be run to log information. + + + + + Gets or sets an action to be run to log warnings. + + + + + Gets or sets an action to be run to log verbose information. + + + + + Convention to distinguish between optional and required relationships based on CLR nullability of the foreign key property. + + + + + Convention to process instances of found on properties in the model. + + + + + Configures the table and column mapping of a relationship that does not expose foreign key properties in the object model. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the name of the column(s) for the foreign key. + + + The foreign key column names. + When using multiple foreign key properties, the properties must be specified in the same order that the + the primary key properties were configured for the target entity type. + + The same ForeignKeyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Configures the table name that the foreign key column(s) reside in. + The table that is specified must already be mapped for the entity type. + + If you want the foreign key(s) to reside in their own table then use the Map method + on to perform + entity splitting to create the table with just the primary key property. Foreign keys can + then be added to the table via this method. + + Name of the table. + The same ForeignKeyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Configures the table name and schema that the foreign key column(s) reside in. + The table that is specified must already be mapped for the entity type. + + If you want the foreign key(s) to reside in their own table then use the Map method + on to perform + entity splitting to create the table with just the primary key property. Foreign keys can + then be added to the table via this method. + + Name of the table. + Schema of the table. + The same ForeignKeyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Moves a foreign key constraint from oldTable to newTable and updates column references + + + + + Move any FK constraints that are now completely in newTable and used to refer to oldColumn + + + + + A LazyInternalConnection object manages information that can be used to create a DbConnection object and + is responsible for creating that object and disposing it. + + + + + InternalConnection objects manage DbConnections. + Two concrete base classes of this abstract interface exist: + and . + + + + + Creates an from metadata in the connection. This method must + only be called if ConnectionHasModel returns true. + + The newly created context. + + + + Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + + + + + Called after the connection is initialized for the first time. + + + + + Adds a tracking cookie to the connection string for SqlConnections. Returns the + possibly modified store connection string. + + + + + Returns the underlying DbConnection. + + + + + Returns a key consisting of the connection type and connection string. + If this is an EntityConnection then the metadata path is included in the key returned. + + + + + + Gets a value indicating whether the connection is an EF connection which therefore contains + metadata specifying the model, or instead is a store connection, in which case it contains no + model info. + + true if the connection contains model info; otherwise, false. + + + + Returns the origin of the underlying connection string. + + + + + Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries + and connection strins. + + + + + Gets or sets the provider to be used when creating the underlying connection. + + + + + Gets the name of the underlying connection string. + + + + + Gets the original connection string. + + + + + Gets or sets the underlying object. No initialization is done when the + connection is obtained, and it can also be set to null. + + The underlying connection. + + + + Creates a new LazyInternalConnection using convention to calculate the connection. + The DbConnection object will be created lazily on demand and will be disposed when the LazyInternalConnection is disposed. + + Either the database name or a connection string. + + + + Creates a new LazyInternalConnection targeting a specific database. + The DbConnection object will be created lazily on demand and will be disposed when the LazyInternalConnection is disposed. + + The connection to target. + + + + Creates an from metadata in the connection. This method must + only be called if ConnectionHasModel returns true. + + The newly created context. + + + + Disposes the underlying DbConnection. + Note that dispose actually puts the LazyInternalConnection back to its initial state such that + it can be used again. + + + + + Creates the underlying (which may actually be an ) + if it does not already exist. + + + + + Searches the app.config/web.config file for a connection that matches the given name. + The connection might be a store connection or an EF connection. + + The connection name. + + True if a connection from the app.config file was found and used. + + + + Attempts to locate a connection entry in the configuration based on the supplied context name. + + The name to search for. + The configuration to search in. + Connection string if found, otherwise null. + + + + Initializes the connection based on a connection string. + + The settings to initialize from. + + + + Returns the underlying DbConnection, creating it first if it does not already exist. + + + + + Returns the origin of the underlying connection string. + + + + + + + + Gets the name of the underlying connection string. + + + + + Returns a key consisting of the connection type and connection string. + If this is an EntityConnection then the metadata path is included in the key returned. + + + + + + Gets a value indicating whether the connection is an EF connection which therefore contains + metadata specifying the model, or instead is a store connection, in which case it contains no + model info. + + true if connection contain model info; otherwise, false. + + + + Gets a value indicating if the lazy connection has been initialized. + + + + + Initializes a new instance of the class. + + The type that the property is declared on. + Type of the property. + The property name. + if set to true this is a collection nav prop. + + + + Creates a new the runtime type of which will be + determined by the metadata. + + The entity entry to which the member belongs. + The parent property entry which will always be null for navigation entries. + The new entry. + + + + Gets the type of the member for which this is metadata. + + The type of the member entry. + + + + Gets the type of the member, which for collection properties is the type + of the collection rather than the type in the collection. + + The type of the member. + + + + Base class for and + containing common code for collection and reference navigation property entries. + + + + + Initializes a new instance of the class. + + The internal entity entry. + The navigation metadata. + + + + Calls Load on the underlying . + + + + + Uses CreateSourceQuery on the underlying to create a query for this + navigation property. + + + + + Gets the navigation property value from the object. + + The entity. + The navigation property value. + + + + Validates that the owning entity entry is associated with an underlying and + is not just wrapping a non-attached entity. + If the entity is not detached, then the RelatedEnd for this navigation property is obtained. + + + + + Calls IsLoaded on the underlying . + + + + + Gets the related end, which will be null if the entity is not being tracked. + + The related end. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references or the collection of references + for a collection property. + This property is virtual so that it can be mocked. + + The current value. + + + + Gets a delegate that can be used to get the value of the property directly from the entity. + Returns null if the property does not have an accessible getter. + + The getter delegate, or null. + + + + Gets a delegate that can be used to set the value of the property directly on the entity. + Returns null if the property does not have an accessible setter. + + The setter delegate, or null. + + + + The methods here are called from multiple places with an ObjectContext that may have + been created in a variety of ways and ensure that the same code is run regardless of + how the context was created. + + + + + Used a delegate to do the actual creation once an ObjectContext has been obtained. + This is factored in this way so that we do the same thing regardless of how we get to + having an ObjectContext. + Note however that a context obtained from only a connection will have no model and so + will result in an empty database. + + + + + Used a delegate to do the actual existence check once an ObjectContext has been obtained. + This is factored in this way so that we do the same thing regardless of how we get to + having an ObjectContext. + + + + + Used a delegate to do the actual check/delete once an ObjectContext has been obtained. + This is factored in this way so that we do the same thing regardless of how we get to + having an ObjectContext. + + + + + Implements ICachedMetadataWorkspace for a Code First model. + + + + + Represents an object that holds a cached copy of a MetadataWorkspace and optionally the + assemblies containing entity types to use with that workspace. + + + + + Gets the MetadataWorkspace, potentially lazily creating it if it does not already exist. + If the workspace is not compatible with the provider manifest obtained from the given + connection then an exception is thrown. + + The connection to use to create or check SSDL provider info. + The workspace. + + + + The list of assemblies that contain entity types for this workspace, which may be empty, but + will never be null. + + + + + The default container name for code first is the container name that is set from the DbModelBuilder + + + + + The provider info used to construct the workspace. + + + + + Builds and stores the workspace based on the given code first configuration. + + The code first EDM model. + + + + Gets the . + If the workspace is not compatible with the provider manifest obtained from the given + connection then an exception is thrown. + + The connection to use to create or check SSDL provider info. + The workspace. + + + + The default container name for code first is the container name that is set from the DbModelBuilder + + + + + The list of assemblies that contain entity types for this workspace, which may be empty, but + will never be null. + + + + + The provider info used to construct the workspace. + + + + + Represents a LINQ to Entities query against a DbContext. + + The type of entity to query for. + + + + Creates a new query that will be backed by the given internal query object. + + The backing query. + + + + + Returns a new query where the entities returned will not be cached in the . + + A new query with NoTracking applied. + + + + Throws an exception indicating that binding directly to a store query is not supported. + Instead populate a DbSet with data, for example by using the Load extension method, and + then bind to local data. For WPF bind to DbSet.Local. For Windows Forms bind to + DbSet.Local.ToBindingList(). + + + Never returns; always throws. + + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + Returns a representation of the underlying query. + + + The query string. + + + + + Returns a new instance of the non-generic class for this query. + + A non-generic version. + + + + Returns false. + + false. + + + + The IQueryable element type. + + + + + The IQueryable LINQ Expression. + + + + + The IQueryable provider. + + + + + The internal query object that is backing this DbQuery + + + + + The internal query object that is backing this DbQuery + + + + + A non-generic version of the class. + + + + + Initializes a new instance of the class. + + The internal entry. + + + + Queries the database for copies of the values of the tracked entity as they currently exist in the database. + Note that changing the values in the returned dictionary will not update the values in the database. + If the entity is not found in the database then null is returned. + + The store values. + + + + Reloads the entity from the database overwriting any property values with values from the database. + The entity will be in the Unchanged state after calling this method. + + + + + Gets an object that represents the reference (i.e. non-collection) navigation property from this + entity to another entity. + + The name of the navigation property. + An object representing the navigation property. + + + + Gets an object that represents the collection navigation property from this + entity to a collection of related entities. + + The name of the navigation property. + An object representing the navigation property. + + + + Gets an object that represents a scalar or complex property of this entity. + + The name of the property. + An object representing the property. + + + + Gets an object that represents a complex property of this entity. + + The name of the complex property. + An object representing the complex property. + + + + Gets an object that represents a member of the entity. The runtime type of the returned object will + vary depending on what kind of member is asked for. The currently supported member types and their return + types are: + Reference navigation property: . + Collection navigation property: . + Primitive/scalar property: . + Complex property: . + + The name of the member. + An object representing the member. + + + + Returns a new instance of the generic class for the given + generic type for the tracked entity represented by this object. + Note that the type of the tracked entity must be compatible with the generic type or + an exception will be thrown. + + The type of the entity. + A generic version. + + + + Validates this instance and returns validation result. + + + Entity validation result. Possibly null if + method is overridden. + + + + + Determines whether the specified is equal to this instance. + Two instances are considered equal if they are both entries for + the same entity on the same . + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + Two instances are considered equal if they are both entries for + the same entity on the same . + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the entity. + + The entity. + + + + Gets or sets the state of the entity. + + The state. + + + + Gets the current property values for the tracked entity represented by this object. + + The current values. + + + + Gets the original property values for the tracked entity represented by this object. + The original values are usually the entity's property values as they were when last queried from + the database. + + The original values. + + + + Gets InternalEntityEntry object for this DbEntityEntry instance. + + + + + Returned by the ChangeTracker method of to provide access to features of + the context that are related to change tracking of entities. + + + + + Initializes a new instance of the class. + + The internal context. + + + + Gets objects for all the entities tracked by this context. + + The entries. + + + + Gets objects for all the entities of the given type + tracked by this context. + + The type of the entity. + The entries. + + + + Detects changes made to the properties and relationships of POCO entities. Note that some types of + entity (such as change tracking proxies and entities that derive from ) + report changes automatically and a call to DetectChanges is not normally needed for these types of entities. + Also note that normally DetectChanges is called automatically by many of the methods of + and its related classes such that it is rare that this method will need to be called explicitly. + However, it may be desirable, usually for performance reasons, to turn off this automatic calling of + DetectChanges using the AutoDetectChangesEnabled flag from . + + + + + An IDbSet represents the collection of all entities in the context, or that can be queried from the + database, of a given type. DbSet is a concrete implementation of IDbSet. + + The type that defines the set. + + + + Finds an entity with the given primary key values. + If an entity with the given primary key values exists in the context, then it is + returned immediately without making a request to the store. Otherwise, a request + is made to the store for an entity with the given primary key values and this entity, + if found, is attached to the context and returned. If no entity is found in the + context or the store, then null is returned. + + + The ordering of composite key values is as defined in the EDM, which is in turn as defined in + the designer, by the Code First fluent API, or by the DataMember attribute. + + The values of the primary key for the entity to be found. + The entity found, or null. + + + + Adds the given entity to the context underlying the set in the Added state such that it will + be inserted into the database when SaveChanges is called. + + The entity to add. + The entity. + + Note that entities that are already in the context in some other state will have their state set + to Added. Add is a no-op if the entity is already in the context in the Added state. + + + + + Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges + is called. Note that the entity must exist in the context in some other state before this method + is called. + + The entity to remove. + The entity. + + Note that if the entity exists in the context in the Added state, then this method + will cause it to be detached from the context. This is because an Added entity is assumed not to + exist in the database such that trying to delete it does not make sense. + + + + + Attaches the given entity to the context underlying the set. That is, the entity is placed + into the context in the Unchanged state, just as if it had been read from the database. + + The entity to attach. + The entity. + + Attach is used to repopulate a context with an entity that is known to already exist in the database. + SaveChanges will therefore not attempt to insert an attached entity into the database because + it is assumed to already be there. + Note that entities that are already in the context in some other state will have their state set + to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state. + + + + + Creates a new instance of an entity for the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The entity instance, which may be a proxy. + + + + Creates a new instance of an entity for the type of this set or for a type derived + from the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The type of entity to create. + The entity instance, which may be a proxy. + + + + Gets an that represents a local view of all Added, Unchanged, + and Modified entities in this set. This local view will stay in sync as entities are added or + removed from the context. Likewise, entities added to or removed from the local view will automatically + be added to or removed from the context. + + + This property can be used for data binding by populating the set with data, for example by using the Load + extension method, and then binding to the local data through this property. For WPF bind to this property + directly. For Windows Forms bind to the result of calling ToBindingList on this property + + The local view. + + + + An implementation of this interface is used to initialize the underlying database when + an instance of a derived class is used for the first time. + This initialization can conditionally create the database and/or seed it with data. + The strategy used is set using the static InitializationStrategy property of the + class. + The following implementations are provided: + , + , + . + + + + + Executes the strategy to initialize the database for the given context. + + The context. + + + + An implementation of IDatabaseInitializer that will recreate and optionally re-seed the + database only if the database does not exist. + To seed the database, create a derived class and override the Seed method. + + The type of the context. + + + + Executes the strategy to initialize the database for the given context. + + The context. + + + + A that should be overridden to actually add data to the context for seeding. + The default implementation does nothing. + + The context to seed. + + + + Parsing code taken from System.dll's System.CodeDom.Compiler.CodeGenerator.IsValidLanguageIndependentIdentifier(string) method to avoid LinkDemand needed to call this method + + + + + + + + + + + Indicates which Entity Data Model (EDM) concept is represented by a given item. + + + + + Association End Kind + + + + + Association Set Kind + + + + + Association Type Kind + + + + + Collection Type Kind + + + + + Complex Type Kind + + + + + Entity Container Kind + + + + + Entity Set Kind + + + + + Entity Type Kind + + + + + Function Group Kind + + + + + Function Overload Kind + + + + + Function Import Kind + + + + + Function Parameter Kind + + + + + Navigation Property Kind + + + + + EdmProperty Type Kind + + + + + Association Constraint Type Kind + + + + + Ref Type Kind + + + + + Row Column Kind + + + + + Row Type Kind + + + + + Type Reference Kind + + + + + Model Kind + + + + + Namespace Kind + + + + + Primitive Facets Kind + + + + + Primitive Type Kind + + + + + Represents the mapping of an EDM association end ( ) as a collection of property mappings ( ). + + + + + Gets an value representing the association end that is being mapped. + + + + + Gets the collection of s that specifies how the association end key properties are mapped to the table. + + + + + Specifies the action to take on a given operation. + + + + + Default behavior + + + + + Restrict the operation + + + + + Cascade the operation + + + + + Represents renaming an existing column. + + + + + Initializes a new instance of the RenameColumnOperation class. + + Name of the table the column belongs to. + Name of the column to be renamed. + New name for the column. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table the column belongs to. + + + + + Gets the name of the column to be renamed. + + + + + Gets the new name for the column. + + + + + Gets an operation that reverts the rename. + + + + + + + + Represents deleting a new record from the migrations history table. + The migrations history table is used to store a log of the migrations that have been applied to the database. + + + + + Common base class for operations that affect the migrations history table. + The migrations history table is used to store a log of the migrations that have been applied to the database. + + + + + Initializes a new instance of the HistoryOperation class. + + Name of the migrations history table. + Name of the migration being affected. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the migrations history table. + + + + + Gets the name of the migration being affected. + + + + + + + + Initializes a new instance of the DeleteHistoryOperation class. + + Name of the migrations history table. + Id of the migration record to be deleted. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Helper class that is used to configure a column. + + + + + Creates a new column definition to store Binary data. + + Value indicating whether or not the column allows null values. + The maximum allowable length of the array data. + Value indicating whether or not all data should be padded to the maximum length. + Value indicating whether or not the maximum length supported by the database provider should be used. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + Value indicating whether or not this column should be configured as a timestamp. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Boolean data. + + Value indicating whether or not the column allows null values. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Byte data. + + Value indicating whether or not the column allows null values. + Value indicating whether or not the database will generate values for this column during insert. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store DateTime data. + + Value indicating whether or not the column allows null values. + The precision of the column. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Decimal data. + + Value indicating whether or not the column allows null values. + The numeric precision of the column. + The numeric scale of the column. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + Value indicating whether or not the database will generate values for this column during insert. + The newly constructed column definition. + + + + Creates a new column definition to store Double data. + + Value indicating whether or not the column allows null values. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store GUID data. + + Value indicating whether or not the column allows null values. + Value indicating whether or not the database will generate values for this column during insert. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Single data. + + Value indicating whether or not the column allows null values. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Short data. + + Value indicating whether or not the column allows null values. + Value indicating whether or not the database will generate values for this column during insert. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Integer data. + + Value indicating whether or not the column allows null values. + Value indicating whether or not the database will generate values for this column during insert. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Long data. + + Value indicating whether or not the column allows null values. + Value indicating whether or not the database will generate values for this column during insert. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store String data. + + Value indicating whether or not the column allows null values. + The maximum allowable length of the string data. + Value indicating whether or not all data should be padded to the maximum length. + Value indicating whether or not the maximum length supported by the database provider should be used. + Value indicating whether or not the column supports Unicode content. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store Time data. + + Value indicating whether or not the column allows null values. + The precision of the column. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Creates a new column definition to store DateTimeOffset data. + + Value indicating whether or not the column allows null values. + The precision of the column. + Constant value to use as the default value for this column. + SQL expression used as the default value for this column. + The name of the column. + Provider specific data type to use for this column. + The newly constructed column definition. + + + + Returns true if a variable of this type can be assigned a null value + + + + True if a reference type or a nullable value type, + false otherwise + + + + + Handles mapping from a CLR property to an EDM assocation and nav. prop. + + + + + Allows configuration to be performed for an entity type in a model. + + An EntityTypeConfiguration can be obtained via the Entity method on + or a custom type derived from EntityTypeConfiguration + can be registered via the Configurations property on . + + + + + Allows configuration to be performed for a type in a model. + + The type to be configured. + + + + Configures a property that is defined on this type. + + The type of the property being configured. + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + The type of the property being configured. + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Configures a property that is defined on this type. + + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to configure the property. + + + + Excludes a property from the model so that it will not be mapped to the database. + + The type of the property to be ignored. + + A lambda expression representing the property to be configured. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + + + + Initializes a new instance of EntityTypeConfiguration + + + + + Configures the primary key property(s) for this entity type. + + The type of the key. + + A lambda expression representing the property to be used as the primary key. + C#: t => t.Id + VB.Net: Function(t) t.Id + + If the primary key is made up of multiple properties then specify an anonymous type including the properties. + C#: t => new { t.Id1, t.Id2 } + VB.Net: Function(t) New From { t.Id1, t.Id2 } + + The same EntityTypeConfiguration instance so that multiple calls can be chained. + + + + Configures the entity set name to be used for this entity type. + The entity set name can only be configured for the base type in each set. + + The name of the entity set. + The same EntityTypeConfiguration instance so that multiple calls can be chained. + + + + Configures the table name that this entity type is mapped to. + + The name of the table. + + + + Configures the table name that this entity type is mapped to. + + The name of the table. + The database schema of the table. + + + + Allows advanced configuration related to how this entity type is mapped to the database schema. + By default, any configuration will also apply to any type derived from this entity type. + + Derived types can be configured via the overload of Map that configures a derived type or + by using an EntityTypeConfiguration for the derived type. + + The properties of an entity can be split between multiple tables using multiple Map calls. + + Calls to Map are additive, subsequent calls will not override configuration already preformed via Map. + + An action that performs configuration against an . + The same EntityTypeConfiguration instance so that multiple calls can be chained. + + + + Allows advanced configuration related to how a derived entity type is mapped to the database schema. + Calls to Map are additive, subsequent calls will not override configuration already preformed via Map. + + The derived entity type to be configured. + An action that performs configuration against an . + The same EntityTypeConfiguration instance so that multiple calls can be chained. + + + + Configures an optional relationship from this entity type. + Instances of the entity type will be able to be saved to the database without this relationship being specified. + The foreign key in the database will be nullable. + + The type of the entity at the other end of the relationship. + + A lambda expression representing the navigation property for the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures a required relationship from this entity type. + Instances of the entity type will not be able to be saved to the database unless this relationship is specified. + The foreign key in the database will be non-nullable. + + The type of the entity at the other end of the relationship. + + A lambda expression representing the navigation property for the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures a many relationship from this entity type. + + The type of the entity at the other end of the relationship. + + A lambda expression representing the navigation property for the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Convention to detect primary key properties. + Recognized naming patterns in order of precedence are: + 1. 'Id' + 2. [type name]Id + Primary key detection is case insensitive. + + + + + Used to configure a property of an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the property to be optional. + The database column used to store this property will be nullable. + + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be required. + The database column used to store this property will be non-nullable. + properties are required by default. + + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures how values for the property are generated by the database. + + + The pattern used to generate values for the property in the database. + Setting 'null' will remove the database generated pattern facet from the property. + Setting 'null' will cause the same runtime behavior as specifying 'None'. + + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be used as an optimistic concurrency token. + + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the property is to be used as an optimistic concurrency token. + + + Value indicating if the property is a concurrency token or not. + Specifying 'null' will remove the concurrency token facet from the property. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the database column used to store the property. + + The name of the column. + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the data type of the database column used to store the property. + + Name of the database provider specific data type. + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the order of the database column used to store the property. + This method is also used to specify key ordering when an entity type has a composite key. + + The order that this column should appear in the database table. + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the precision of the property. + If the database provider does not support precision for the data type of the column then the value is ignored. + + Precision of the property. + The same DateTimePropertyConfiguration instance so that multiple calls can be chained. + + + + Initializes configurations in the ModelConfiguration so that configuration data + is in a single place + + + + + Validates a property, complex property or an entity using validation attributes the property + or the complex/entity type is decorated with. + + + Note that this class is used for validating primitive properties using attributes declared on the property + (property level validation) and complex properties and entities using attributes declared on the type + (type level validation). + + + + + Abstracts simple validators used to validate entities and properties. + + + + + Validates an entity or a property. + + Validation context. Never null. + Property to validate. Can be null for type level validation. + Validation error as. Empty if no errors. Never null. + + + + + Display attribute used to specify the display name for a property or entity. + + + + + Validation attribute used to validate a property or an entity. + + + + + Creates an instance of class. + + + Validation attribute used to validate a property or an entity. + + + + + Validates a property or an entity. + + Validation context. Never null. + Property to validate. Null for entity validation. Not null for property validation. + + + Validation errors as . Empty if no errors, never null. + + + + + Contains information needed to validate an entity or its properties. + + + + + The entity being validated or the entity that owns the property being validated. + + + + + Initializes a new instance of EntityValidationContext class. + + + The entity being validated or the entity that owns the property being validated. + + + External contexts needed for validation. + + + + + External context needed for validation. + + + + + Gets the entity being validated or the entity that owns the property being validated. + + + + + Contains metadata for a property of a complex object or entity. + + + + + Initializes a new instance of the class. + + The type that the property is declared on. + Type of the property. + The property name. + if set to true the property is mapped in the EDM. + if set to true the property is a complex property. + + + + Validates that the given name is a property of the declaring type (either on the CLR type or in the EDM) + and that it is a complex or scalar property rather than a nav property and then returns metadata about + the property. + + The internal context. + The type that the property is declared on. + The type of property requested, which may be 'object' if any type can be accepted. + Name of the property. + Metadata about the property, or null if the property does not exist or is a navigation property. + + + + Creates a new the runtime type of which will be + determined by the metadata. + + The entity entry to which the member belongs. + The parent property entry if the new entry is nested, otherwise null. + The new entry. + + + + Gets a value indicating whether this is a complex property. + That is, not whether or not this is a property on a complex object, but rather if the + property itself is a complex property. + + + true if this instance is complex; otherwise, false. + + + + + Gets the type of the member for which this is metadata. + + The type of the member entry. + + + + Gets a value indicating whether this instance is mapped in the EDM. + + true if this instance is mapped; otherwise, false. + + + + Gets the type of the member, which for collection properties is the type + of the collection rather than the type in the collection. + + The type of the member. + + + + A EagerInternalConnection object wraps an already existing DbConnection object. + + + + + Creates a new EagerInternalConnection that wraps an existing DbConnection. + + An existing connection. + If set to true then the underlying connection should be disposed when this object is disposed. + + + + Dispose the existing connection is the original caller has specified that it should be disposed + by the framework. + + + + + Returns the origin of the underlying connection string. + + + + + Static helper methods only. + + + + + Checks whether the given value is null and throws ArgumentNullException if it is. + This method should only be used in places where Code Contracts are compiled out in the + release build but we still need public surface null-checking, such as where a public + abstract class is implemented by an internal concrete class. + + + + + Checks whether the given string is null, empty, or just whitespace, and throws appropriately + if the check fails. + This method should only be used in places where Code Contracts are compiled out in the + release build but we still need public surface checking, such as where a public + abstract class is implemented by an internal concrete class. + + + + + Given two key values that may or may not be byte arrays, this method determines + whether or not they are equal. For non-binary key values, this is equivalent + to Object.Equals. For binary keys, it is by comparison of every byte in the + arrays. + + + + + Provides a standard helper method for quoting identifiers + + Identifier to be quoted. Does not validate that this identifier is valid. + Quoted string + + + + Checks the given string which might be a database name or a connection string and determines + whether it should be treated as a name or connection string. Currently, the test is simply + whether or not the string contains an '=' character--if it does, then it should be treated + as a connection string. + + The name or connection string. + true if the string should be treated as a connection string; false if it should be treated as a name. + + + + Determines whether the given string should be treated as a database name directly (it contains no '='), + is in the form name=foo, or is some other connection string. If it is a direct name or has name=, then + the name is extracted and the method returns true. + + The name or connection string. + The name. + True if a name is found; false otherwise. + + + + Determines whether the given string is a full EF connection string with provider, provider connection string, + and metadata parts, or is is instead some other form of connection string. + + The name or connection string. + true if the given string is an EF connection string; otherwise, false. + + + + + Parses a property selector expression used for the expression-based versions of the Property, Collection, Reference, + etc methods on and + classes. + + The type of the entity. + The type of the property. + The property. + Name of the method. + Name of the param. + The property name. + + + + Called recursively to parse an expression tree representing a property path such + as can be passed to Include or the Reference/Collection/Property methods of . + This involves parsing simple property accesses like o => o.Products as well as calls to Select like + o => o.Products.Select(p => p.OrderLines). + + The expression to parse. + The expression parsed into an include path, or null if the expression did not match. + True if matching succeeded; false if the expression could not be parsed. + + + + Gets a cached dictionary mapping property names to property types for all the properties + in the given type. + + + + + Gets a dictionary of compiled property setter delegates for the underlying types. + The dictionary is cached for the type in the app domain. + + + + + Used by the property setter delegates to throw for attempts to set null onto + non-nullable properties or otherwise go ahead and set the property. + + + + + Gets a dictionary of compiled property getter delegates for the underlying types. + The dictionary is cached for the type in the app domain. + + + + + Creates a new with the NoTracking merge option applied. + The query object passed in is not changed. + + The query. + A new query with NoTracking applied. + + + + Converts to + + + Name of the property being validated with ValidationAttributes. Null for type-level validation. + + + ValidationResults instances to be converted to instances. + + + An created based on the + . + + + class contains a property with names of properties the error applies to. + On the other hand each applies at most to a single property. As a result for + each name in ValidationResult.MemberNames one will be created (with some + exceptions for special cases like null or empty .MemberNames or null names in the .MemberNames). + + + + + Calculates a "path" to a property. For primitive properties on an entity type it is just the + name of the property. Otherwise it is a dot separated list of names of the property and all + its ancestor properties starting from the entity. + + Property for which to calculate the path. + Dot separated path to the property. + + + + Gets names of the property and its ancestor properties as enumerable walking "bottom-up". + + Property for which to get the segments. + Names of the property and its ancestor properties. + + + + Gets an type for the given element type. + + Type of the element. + The collection type. + + + + Creates a database name given a type derived from DbContext. This handles nested and + generic classes. No attempt is made to ensure that the name is not too long since this + is provider specific. If a too long name is generated then the provider will throw and + the user must correct by specifying their own name in the DbContext constructor. + + Type of the context. + The database name to use. + + + + Creates a clone of the given with the given connection string. + + + + + Creates a clone of the given that has the same + loaded metadata as the original but a new connection and new, empty, state manager. + + The original. + + + The clone. + + + + Finds the assemblies that were used for loading o-space types in the source context + and loads those assemblies in the destination context. + + The source. + The destination. + + + + Instances of this class are used to create DbConnection objects for + SQL Server based on a given database name or connection string. By default, the connection is + made to '.\SQLEXPRESS'. This can be changed by changing the base connection + string when constructing a factory instance. + + + An instance of this class can be set on the class to + cause all DbContexts created with no connection information or just a database + name or connection string to use SQL Server by default. + This class is immutable since multiple threads may access instances simultaneously + when creating connections. + + + + + Creates a new connection factory with a default BaseConnectionString property of + 'Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True'. + + + + + Creates a new connection factory with the given BaseConnectionString property. + + + The connection string to use for options to the database other than the 'Initial Catalog'. The 'Initial Catalog' will + be prepended to this string based on the database name when CreateConnection is called. + + + + + Creates a connection for SQL Server based on the given database name or connection string. + If the given string contains an '=' character then it is treated as a full connection string, + otherwise it is treated as a database name only. + + The database name or connection string. + An initialized DbConnection. + + + + The connection string to use for options to the database other than the 'Initial Catalog'. + The 'Initial Catalog' will be prepended to this string based on the database name when + CreateConnection is called. + The default is 'Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True'. + + + + + Remove hard dependency on DbProviderFactories. + + + + + A non-generic version of the class. + + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal property entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Gets an object that represents a nested property of this property. + This method can be used for both scalar or complex properties. + + The name of the nested property. + An object representing the nested property. + + + + Gets an object that represents a nested complex property of this property. + + The name of the nested property. + An object representing the nested property. + + + + Returns the equivalent generic object. + + The type of entity on which the member is declared. + The type of the complex property. + The equivalent generic object. + + + + + + Common code for generic and non-generic string Include. + + + + + + Returns a new query where the entities returned will not be cached in the + or . This method works by calling the AsNoTracking method of the + underlying query object. If the underlying query object does not have a AsNoTracking method, + then calling this method will have no affect. + + The element type. + The source query. + A new query with NoTracking applied, or the source query if NoTracking is not supported. + + + + Returns a new query where the entities returned will not be cached in the + or . This method works by calling the AsNoTracking method of the + underlying query object. If the underlying query object does not have a AsNoTracking method, + then calling this method will have no affect. + + The source query. + A new query with NoTracking applied, or the source query if NoTracking is not supported. + + + + Common code for generic and non-generic AsNoTracking. + + + + + Enumerates the query such that for server queries such as those of , , + , and others the results of the query will be loaded into the associated , + or other cache on the client. + This is equivalent to calling ToList and then throwing away the list without the overhead of actually creating the list. + + The source query. + + + + Returns an implementation that stays in sync with the given . + + The element type. + The collection that the binding list will stay in sync with. + The binding list. + + + + Constants for SSDL XML. + + + + + Contains constant values that apply to the EDM model, regardless of source (for CSDL specific constants see ). + + + + + Allows the construction and modification of a complex type in an Entity Data Model (EDM) . + + + + + Gets or sets the optional that indicates the base complex type of the complex type. + + + + + Gets or sets a value indicating whether the complex type is abstract. + + + + + Gets or sets the collection of instances that describe the (scalar or complex) properties of the complex type. + + + + + Allows the construction and modification of a database schema in a database model. + + + + + DbAliasedMetadataItem provides the base type for all Database Metadata types that can have an optional that should be used instead of the item's when referring to the item in the database. + + + + + Gets an optional alternative identifier that should be used when referring to this item in the database. + + + + + Gets or sets the collection of instances that specifies the tables declared within the schema. + + + + + Indicates which Database Metadata concept is represented by a given item. + + + + + Database Kind + + + + + Schema Kind + + + + + Foreign Key Constraint Kind + + + + + Function Kind + + + + + Function Parameter Kind + + + + + Function Return or Parameter Type Kind + + + + + Row Column Kind + + + + + Table Kind + + + + + Table Column Kind + + + + + Primitive Facets Kind + + + + + Specifies the inverse of a navigation property that represents the other end of the same relationship. + + + + + Initializes a new instance of the class. + + The navigation property representing the other end of the same relationship. + + + + The navigation property representing the other end of the same relationship. + + + + + Represents a provider specific SQL statement to be executed directly against the target database. + + + + + Initializes a new instance of the SqlOperation class. + + The SQL to be executed. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the SQL to be executed. + + + + + Gets or sets a value indicating whether this statement should be performed outside of + the transaction scope that is used to make the migration process transactional. + If set to true, this operation will not be rolled back if the migration process fails. + + + + + + + + Decorator to produce a SQL script instead of applying changes to the database. + Using this decorator to wrap will prevent + from applying any changes to the target database. + + + + + Initializes a new instance of the MigratorScriptingDecorator class. + + The migrator that this decorator is wrapping. + + + + + Scaffolds code-based migrations to apply pending model changes to the database. + + + + + Initializes a new instance of the MigrationScaffolder class. + + Configuration to be used for scaffolding. + + + + Scaffolds a code based migration to apply any pending model changes to the database. + + The name to use for the scaffolded migration. + The scaffolded migration. + + + + Scaffolds a code based migration to apply any pending model changes to the database. + + The name to use for the scaffolded migration. + Whether or not to include model changes. + The scaffolded migration. + + + + Scaffolds the initial code-based migration corresponding to a previously run database initializer. + + The scaffolded migration. + + + + Gets or sets the namespace used in the migration's generated code. + + By default, this is the same as MigrationsNamespace on the migrations + configuration object passed into the constructor. For VB.NET projects, this + will need to be updated to take into account the project's root namespace. + + + + + DbMigrator is used to apply existing migrations to a database. + DbMigrator can be used to upgrade and downgrade to any given migration. + To scaffold migrations based on changes to your model use + + + + + Migration Id representing the state of the database before any migrations are applied. + + + + + Initializes a new instance of the DbMigrator class. + + Configuration to be used for the migration process. + + + + Gets all migrations that are defined in the configured migrations assembly. + + + + + Gets all migrations that have been applied to the target database. + + + + + Gets all migrations that are defined in the assembly but haven't been applied to the target database. + + + + + Updates the target database to a given migration. + + The migration to upgrade/downgrade to. + + + + Gets the configuration that is being used for the migration process. + + + + + Configuration relating to the use of migrations for a given model. + + The context representing the model that this configuration applies to. + + + + Initializes a new instance of the DbMigrationsConfiguration class. + + + + + Runs after upgrading to the latest migration to allow seed data to be updated. + + Context to be used for updating seed data. + + + + Base class for code-based migrations. + + + + + Operations to be performed during the upgrade process. + + + + + Operations to be performed during the downgrade process. + + + + + Adds an operation to create a new table. + + + The columns in this create table operation. + You do not need to specify this type, it will be inferred from the columnsAction parameter you supply. + + The name of the table. Schema name is optional, if no schema is specified then dbo is assumed. + + An action that specifies the columns to be included in the table. + i.e. t => new { Id = t.Int(identity: true), Name = t.String() } + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + An object that allows further configuration of the table creation operation. + + + + Adds an operation to create a new foreign key constraint. + + + The table that contains the foreign key column. + Schema name is optional, if no schema is specified then dbo is assumed. + + The foreign key column. + + The table that contains the column this foreign key references. + Schema name is optional, if no schema is specified then dbo is assumed. + + + The column this foreign key references. + If no value is supplied the primary key of the principal table will be referenced. + + + A value indicating if cascade delete should be configured for the foreign key relationship. + If no value is supplied, cascade delete will be off. + + + The name of the foreign key constraint in the database. + If no value is supplied a unique name will be generated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to create a new foreign key constraint. + + + The table that contains the foreign key columns. + Schema name is optional, if no schema is specified then dbo is assumed. + + The foreign key columns. + + The table that contains the columns this foreign key references. + Schema name is optional, if no schema is specified then dbo is assumed. + + + The columns this foreign key references. + If no value is supplied the primary key of the principal table will be referenced. + + + A value indicating if cascade delete should be configured for the foreign key relationship. + If no value is supplied, cascade delete will be off. + + + The name of the foreign key constraint in the database. + If no value is supplied a unique name will be generated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop a foreign key constraint based on its name. + + + The table that contains the foreign key column. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the foreign key constraint in the database. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop a foreign key constraint based on the column it targets. + + + The table that contains the foreign key column. + Schema name is optional, if no schema is specified then dbo is assumed. + + The foreign key column. + + The table that contains the column this foreign key references. + Schema name is optional, if no schema is specified then dbo is assumed. + + The columns this foreign key references. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop a foreign key constraint based on the columns it targets. + + + The table that contains the foreign key columns. + Schema name is optional, if no schema is specified then dbo is assumed. + + The foreign key columns. + + The table that contains the columns this foreign key references. + Schema name is optional, if no schema is specified then dbo is assumed. + + The columns this foreign key references. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop a table. + + + The name of the table to be dropped. + Schema name is optional, if no schema is specified then dbo is assumed. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to move a table to a new schema. + + + The name of the table to be moved. + Schema name is optional, if no schema is specified then dbo is assumed. + + The schema the table is to be moved to. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to rename a table. To change the schema of a table use MoveTable + + + The name of the table to be renamed. + Schema name is optional, if no schema is specified then dbo is assumed. + + + The new name for the table. + Schema name is optional, if no schema is specified then dbo is assumed. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to rename a column. + + + The name of the table that contains the column to be renamed. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the column to be renamed. + The new name for the column. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to add a column to an existing table. + + + The name of the table to add the column to. + Schema name is optional, if no schema is specified then dbo is assumed. + + + The name of the column to be added. + + + An action that specifies the column to be added. + i.e. c => c.Int(nullable: false, defaultValue: 3) + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop an existing column. + + + The name of the table to drop the column from. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the column to be dropped. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to alter the definition of an existing column. + + + The name of the table the column exists in. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the column to be changed. + + An action that specifies the new definition for the column. + i.e. c => c.String(nullable: false, defaultValue: "none") + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to create a new primary key. + + + The table that contains the primary key column. + Schema name is optional, if no schema is specified then dbo is assumed. + + The primary key column. + + The name of the primary key in the database. + If no value is supplied a unique name will be generated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to create a new primary key based on multiple columns. + + + The table that contains the primary key columns. + Schema name is optional, if no schema is specified then dbo is assumed. + + The primary key columns. + + The name of the primary key in the database. + If no value is supplied a unique name will be generated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop an existing primary key that does not have the default name. + + + The table that contains the primary key column. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the primary key to be dropped. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop an existing primary key that was created with the default name. + + + The table that contains the primary key column. + Schema name is optional, if no schema is specified then dbo is assumed. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to create an index on a single column. + + + The name of the table to create the index on. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the column to create the index on. + + A value indicating if this is a unique index. + If no value is supplied a non-unique index will be created. + + + The name to use for the index in the database. + If no value is supplied a unique name will be generated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to create an index on multiple columns. + + + The name of the table to create the index on. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the columns to create the index on. + + A value indicating if this is a unique index. + If no value is supplied a non-unique index will be created. + + + The name to use for the index in the database. + If no value is supplied a unique name will be generated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop an index based on its name. + + + The name of the table to drop the index from. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the index to be dropped. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to drop an index based on the columns it targets. + + + The name of the table to drop the index from. + Schema name is optional, if no schema is specified then dbo is assumed. + + The name of the column(s) the index targets. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Adds an operation to execute a SQL command. + + The SQL to be executed. + + A value indicating if the SQL should be executed outside of the + transaction being used for the migration process. + If no value is supplied the SQL will be executed within the transaction. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Represents a parameter to be passed to a method + + + + + Convention to set a default maximum length of 4000 for properties whose type supports length facets when SqlCe is the provider. + + + + + Convention to process instances of found on properties in the model + + + + + True if the NavigationProperty's declaring type is the principal end, false if it is not, null if it is not known + + + + + Configures an optional relationship from an entity type. + + The entity type that the relationship originates from. + The entity type that the relationship targets. + + + + Configures the relationship to be optional:many with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:many without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:required with a navigation property on the other side of the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:required without a navigation property on the other side of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:optional with a navigation property on the other side of the relationship. + The entity type being configured will be the dependent and contain a foreign key to the principal. + The entity type that the relationship targets will be the principal in the relationship. + + + An lambda expression representing the navigation property on the other end of the relationship. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:optional without a navigation property on the other side of the relationship. + The entity type being configured will be the dependent and contain a foreign key to the principal. + The entity type that the relationship targets will be the principal in the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:optional with a navigation property on the other side of the relationship. + The entity type being configured will be the principal in the relationship. + The entity type that the relationship targets will be the dependent and contain a foreign key to the principal. + + + A lambda expression representing the navigation property on the other end of the relationship. + + A configuration object that can be used to further configure the relationship. + + + + Configures the relationship to be optional:optional without a navigation property on the other side of the relationship. + The entity type being configured will be the principal in the relationship. + The entity type that the relationship targets will be the dependent and contain a foreign key to the principal. + + A configuration object that can be used to further configure the relationship. + + + + Configures a database column used to store a string values. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the column to allow the maximum length supported by the database provider. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + + Configures the column to be fixed length. + Use HasMaxLength to set the length that the property is fixed to. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures the column to be variable length. + Columns are variable length by default. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures the column to be optional. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures the column to be required. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures the data type of the database column. + + Name of the database provider specific data type. + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures the order of the database column. + + The order that this column should appear in the database table. + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures the column to support Unicode string content. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the column supports Unicode string content. + + + Value indicating if the column supports Unicode string content or not. + Specifying 'null' will remove the Unicode facet from the column. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same StringColumnConfiguration instance so that multiple calls can be chained. + + + + Allows derived configuration classes for entities and complex types to be registered with a . + + + Derived configuration classes are created by deriving from + or and using a type to be included in the model as the generic + parameter. + + Configuration can be performed without creating derived configuration classes via the Entity and ComplexType + methods on . + + + + + Adds an to the . + Only one can be added for each type in a model. + + The entity type being configured. + The entity type configuration to be added. + The same ConfigurationRegistrar instance so that multiple calls can be chained. + + + + Adds an to the . + Only one can be added for each type in a model. + + The complex type being configured. + The complex type configuration to be added + The same ConfigurationRegistrar instance so that multiple calls can be chained. + + + + An extended BindingList implementation that implements sorting. + This class was adapted from the LINQ to SQL class of the same name. + + The element type. + + + + Initializes a new instance of the class with the + the given underlying list. Note that sorting is dependent on having an actual + rather than some other ICollection implementation. + + The list. + + + + Applies sorting to the list. + + The property to sort by. + The sort direction. + + + + Stops sorting. + + + + + Gets a value indicating whether this list is sorted. + + + true if this instance is sorted; otherwise, false. + + + + + Gets the sort direction. + + The sort direction. + + + + Gets the sort property being used to sort. + + The sort property. + + + + Returns true indicating that this list supports sorting. + + true. + + + + Implements comparing for the implementation. + + + + + Initializes a new instance of the class + for sorting the list. + + The property to sort by. + The sort direction. + + + + Compares two instances of items in the list. + + The left item to compare. + The right item to compare. + + + + + Determines whether this instance can sort for the specified type. + + The type. + + true if this instance can sort for the specified type; otherwise, false. + + + + + Determines whether this instance can sort for the specified type using IComparable. + + The type. + + true if this instance can sort for the specified type; otherwise, false. + + + + + Determines whether this instance can sort for the specified type using ToString. + + The type. + + true if this instance can sort for the specified type; otherwise, false. + + + + + An interface implemented by . + + + + + Creates a new query that will be backed by the given InternalContext. + + The backing context. + + + + Resets the set to its uninitialized state so that it will be re-lazy initialized the next + time it is used. This allows the ObjectContext backing a DbContext to be switched out. + + + + + Finds an entity with the given primary key values. + If an entity with the given primary key values exists in the context, then it is + returned immediately without making a request to the store. Otherwise, a request + is made to the store for an entity with the given primary key values and this entity, + if found, is attached to the context and returned. If no entity is found in the + context or the store, then null is returned. + + + The ordering of composite key values is as defined in the EDM, which is in turn as defined in + the designer, by the Code First fluent API, or by the DataMember attribute. + + The values of the primary key for the entity to be found. + The entity found, or null. + Thrown if multiple entities exist in the context with the primary key values given. + Thrown if the type of entity is not part of the data model for this context. + Thrown if the types of the key values do not match the types of the key values for the entity type to be found. + Thrown if the context has been disposed. + + + + Finds an entity in the state manager with the given primary key values, or returns null + if no such entity can be found. This includes looking for Added entities with the given + key values. + + + + + Finds an entity in the store with the given primary key values, or returns null + if no such entity can be found. This code is adapted from TryGetObjectByKey to + include type checking in the query. + + + + + Attaches the given entity to the context underlying the set. That is, the entity is placed + into the context in the Unchanged state, just as if it had been read from the database. + + + Attach is used to repopulate a context with an entity that is known to already exist in the database. + SaveChanges will therefore not attempt to insert an attached entity into the database because + it is assumed to already be there. + Note that entities that are already in the context in some other state will have their state set + to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state. + This method is virtual so that it can be mocked. + + The entity to attach. + + + + Adds the given entity to the context underlying the set in the Added state such that it will + be inserted into the database when SaveChanges is called. + + + Note that entities that are already in the context in some other state will have their state set + to Added. Add is a no-op if the entity is already in the context in the Added state. + This method is virtual so that it can be mocked. + + The entity to add. + + + + Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges + is called. Note that the entity must exist in the context in some other state before this method + is called. + + + Note that if the entity exists in the context in the Added state, then this method + will cause it to be detached from the context. This is because an Added entity is assumed not to + exist in the database such that trying to delete it does not make sense. + This method is virtual so that it can be mocked. + + The entity to remove. + + + + This method checks whether an entity is already in the context. If it is, then the state + is changed to the new state given. If it isn't, then the action delegate is executed to + either Add or Attach the entity. + + A delegate to Add or Attach the entity. + The new state to give the entity if it is already in the context. + The entity. + Name of the method. + + + + Creates a new instance of an entity for the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The entity instance, which may be a proxy. + + + + Creates a new instance of an entity for the type of this set or for a type derived + from the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The type of entity to create. + The entity instance, which may be a proxy. + + + + Performs lazy initialization of the underlying ObjectContext, ObjectQuery, and EntitySet objects + so that the query can be used. + This method is virtual so that it can be mocked. + + + + + Attempts to perform lazy initialization of the underlying ObjectContext, ObjectQuery, and EntitySet objects + so that o-space loading has happened and the query can be used. This method doesn't throw if the type + for the set is not mapped. + + + + + Creates an underlying for this set. + + if set to true then the query is set to be no-tracking. + The query. + + + + Returns a representation of the underlying query, equivalent + to ToTraceString on ObjectQuery. + + + The query string. + + + + + Updates the underlying ObjectQuery with the given include path. + + The include path. + A new query containing the defined include path. + + + + Returns a new query where the entities returned will not be cached in the . + + A new query with NoTracking applied. + + + + Executes the given SQL query against the database materializing entities into the entity set that + backs this set. + + The SQL quey. + if true then the entities are not tracked, otherwise they are. + The parameters. + The query results. + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + Gets the ObservableCollection representing the local view for the set based on this query. + + + + + The underlying ObjectQuery. Accessing this property will trigger lazy initialization of the query. + + + + + The underlying EntitySet name. Accessing this property will trigger lazy initialization of the query. + + + + + The underlying EntitySet name, quoted for ESQL. Accessing this property will trigger lazy initialization of the query. + + + + + The underlying EntitySet. Accessing this property will trigger lazy initialization of the query. + + + + + The base type for the underlying entity set. Accessing this property will trigger lazy initialization of the query. + + + + + The underlying InternalContext. Accessing this property will trigger lazy initialization of the query. + + + + + The LINQ query expression. + + + + + The LINQ query provider for the underlying . + + + + + A local (in-memory) view of the entities in a DbSet. + This view contains Added entities and does not contain Deleted entities. The view extends + from and hooks up events between the collection and the + state manager to keep the view in sync. + + The type of the entity. + + + + Initializes a new instance of the class for entities + of the given generic type in the given internal context. + + The internal context. + + + + Called by the base class when the collection changes. + This method looks at the change made to the collection and reflects those changes in the + state manager. + + The instance containing the event data. + + + + Handles events from the state manager for entities entering, leaving, or being marked as deleted. + The local view is kept in sync with these changes. + + The sender. + The instance containing the event data. + + + + Clears the items by calling remove on each item such that we get Remove events that + can be tracked back to the state manager, rather than a single Reset event that we + cannot deal with. + + + + + Adds a contains check to the base implementation of InsertItem since we can't support + duplicate entities in the set. + + The index at which to insert. + The item to insert. + + + + Returns a cached binding list implementation backed by this ObservableCollection. + + The binding list. + + + + Instances of this class are returned from the Collection method of + and allow operations such as loading to + be performed on the an entity's collection navigation properties. + + The type of the entity to which this property belongs. + The type of the element in the collection of entities. + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal collection entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Loads the collection of entities from the database. + Note that entities that already exist in the context are not overwritten with values from the database. + + + + + Returns the query that would be used to load this collection from the database. + The returned query can be modified using LINQ to perform filtering or operations in the database, such + as counting the number of entities in the collection in the database without actually loading them. + + A query for the collection. + + + + Returns a new instance of the non-generic class for + the navigation property represented by this object. + + A non-generic version. + + + + Gets the property name. + + The property name. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references. + + The current value. + + + + Gets a value indicating whether the collection of entities has been loaded from the database. + + true if the collection is loaded; otherwise, false. + + + + Gets the underlying as an . + + The internal member entry. + + + + The to which this navigation property belongs. + + An entry for the entity that owns this navigation property. + + + + Allows the construction and modification of an association set in an Entity Data Model (EDM) ). + + + + + Gets or sets the that specifies the association type for the set. + + + + + Gets or sets the that specifies the entity set corresponding to the association end for this association set. + + + + + Gets or sets the that specifies the entity set corresponding to the association end for this association set. + + + + + Indicates the multiplicity of an and whether or not it is required. + + + + + Gets a value representing the table to which the entity type's properties are being mapped. + + + + + Gets the collection of s that specifies how the type's properties are mapped to the table. + + + + + Gets the collection of s that specifies the constant or null values that columns in must have for this type mapping fragment to apply. + + + + + Denotes that a property or class should be excluded from database mapping. + + + + + Represents creating a table. + + + + + Initializes a new instance of the CreateTableOperation class. + + Name of the table to be created. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table to be created. + + + + + Gets the columns to be included in the new table. + + + + + Gets or sets the primary key for the new table. + + + + + Gets an operation to drop the table. + + + + + + + + Represents adding a primary key to a table. + + + + + Common base class to represent operations affecting primary keys. + + + + + Initializes a new instance of the PrimaryKeyOperation class. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets or sets the name of the table that contains the primary key. + + + + + Gets the column(s) that make up the primary key. + + + + + Gets a value indicating if a specific name has been supplied for this primary key. + + + + + Gets or sets the name of this primary key. + If no name is supplied, a default name will be calculated. + + + + + + + + Initializes a new instance of the AddPrimaryKeyOperation class. + The Table and Columns properties should also be populated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets an operation to drop the primary key. + + + + + Provides additional metadata about a code-based migration. + + + + + Gets the unique identifier for the migration. + + + + + Gets the state of the model before this migration is run. + + + + + Gets the state of the model after this migration is run. + + + + + Handles creating databases either using the core provider or the Migrations pipeline. + + + + + Creates a database using the core provider (i.e. ObjectContext.CreateDatabase) or + by using Code First Migrations to create an empty database + and the perform an automatic migration to the current model. + Migrations is used if Code First is being used and the EF provider is for SQL Server + or SQL Compact. The core is used for non-Code First models and for other providers even + when using Code First. + + + + + Represents setting the default connection factory + + + + + Factory method for PluralizationService. Only support english pluralization. + Please set the PluralizationService on the System.Data.Entity.Design.EntityModelSchemaGenerator + to extend the service to other locales. + + CultureInfo + PluralizationService + + + + Convention to apply column ordering specified via or the API. + + + + + Convention to process instances of found on types in the model. + + + + + Used to configure a property of an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the property to be optional. + The database column used to store this property will be nullable. + + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be required. + The database column used to store this property will be non-nullable. + properties are required by default. + + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures how values for the property are generated by the database. + + + The pattern used to generate values for the property in the database. + Setting 'null' will remove the database generated pattern facet from the property. + Setting 'null' will cause the same runtime behavior as specifying 'None'. + + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be used as an optimistic concurrency token. + + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the property is to be used as an optimistic concurrency token. + + + Value indicating if the property is a concurrency token or not. + Specifying 'null' will remove the concurrency token facet from the property. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the database column used to store the property. + + The name of the column. + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the data type of the database column used to store the property. + + Name of the database provider specific data type. + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the order of the database column used to store the property. + This method is also used to specify key ordering when an entity type has a composite key. + + The order that this column should appear in the database table. + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the precision and scale of the property. + + The precision of the property. + The scale of the property. + The same DecimalPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the table and column mapping for an entity type or a sub-set of properties from an entity type. + This configuration functionality is available via the Code First Fluent API, see . + + The entity type to be mapped. + + + + Configures the properties that will be included in this mapping fragment. + If this method is not called then all properties that have not yet been + included in a mapping fragment will be configured. + + An anonymous type including the properties to be mapped. + + A lambda expression to an anonymous type that contains the properties to be mapped. + C#: t => new { t.Id, t.Property1, t.Property2 } + VB.Net: Function(t) New From { p.Id, t.Property1, t.Property2 } + + + + + Re-maps all properties inherited from base types. + + When configuring a derived type to be mapped to a separate table this will cause all properties to + be included in the table rather than just the non-inherited properties. This is known as + Table per Concrete Type (TPC) mapping. + + + + + Configures the table name to be mapped to. + + Name of the table. + + + + Configures the table name and schema to be mapped to. + + Name of the table. + Schema of the table. + + + + Configures the discriminator column used to differentiate between types in an inheritance hierarchy. + + The name of the discriminator column. + A configuration object to further configure the discriminator column and values. + + + + Configures the discriminator condition used to differentiate between types in an inheritance hierarchy. + + The type of the property being used to discriminate between types. + + A lambda expression representing the property being used to discriminate between types. + C#: t => t.MyProperty + VB.Net: Function(t) t.MyProperty + + A configuration object to further configure the discriminator condition. + + + + Contracts for abstract class. + + + + + Validator used to validate an entity of a given EDM EntityType. + + + This is a top level, composite validator. This is also an entry point to getting an entity + validated as validation of an entity is always started by calling Validate method on this type. + + + + + Creates an instance for a given EDM entity type. + + Property validators. + Entity type level validators. + + + + Validates an entity. + + Entity validation context. Must not be null. + instance. Never null. + + + + Validates type properties. Any validation errors will be added to + collection. + + + Validation context. Must not be null. + + + Collection of validation errors. Any validation errors will be added to it. + + The entry for the complex property. Null if validating an entity. + + Note that will be modified by this method. Errors should be only added, + never removed or changed. Taking a collection as a modifiable parameter saves a couple of memory allocations + and a merge of validation error lists per entity. + + + + + The internal class used to implement and + . + This internal class contains all the common implementation between the generic and non-generic + entry classes and also allows for a clean internal factoring without compromising the public API. + + + + + Initializes a new instance of the class. + + The internal entity entry. + The navigation metadata. + + + + Gets the navigation property value from the object. + Since for a collection the related end is an , it means + that the internal representation of the navigation property is just the related end. + + The entity. + The navigation property value. + + + + Creates a new non-generic backed by this internal entry. + The runtime type of the DbMemberEntry created will be or a subtype of it. + + The new entry. + + + + Creates a new generic backed by this internal entry. + The runtime type of the DbMemberEntry created will be or a subtype of it. + + The type of the entity. + The type of the property. + The new entry. + + + + Creates a new generic backed by this internal entry. + The actual subtype of the DbCollectionEntry created depends on the metadata of this internal entry. + + The type of the entity. + The type of the element. + The new entry. + + + + Creates a object for the given entity type + and collection element type. + + The type of the entity. + The type of the property. + Type of the element. + The set. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references or the collection of references + for a collection property. + + The current value. + + + + An implementation of that represents a clone of another + dictionary. That is, all the property values have been been copied into this dictionary. + + + + + The internal class used to implement . + This internal class allows for a clean internal factoring without compromising the public API. + + + + + Initializes a new instance of the class. + + The internal context with which the entity of complex object is associated. + The type of the entity or complex object. + If set to true this is a dictionary for an entity, otherwise it is a dictionary for a complex object. + + + + Implemented by subclasses to get the dictionary item for a given property name. + Checking that the name is valid should happen before this method is called such + that subclasses do not need to perform the check. + + Name of the property. + An item for the given name. + + + + Creates an object of the underlying type for this dictionary and hydrates it with property + values from this dictionary. + + The properties of this dictionary copied into a new object. + + + + Creates an instance of the underlying type for this dictionary, which may either be an entity type (in which + case CreateObject on the context is used) or a non-entity type (in which case the empty constructor is used.) + In either case, app domain cached compiled delegates are used to do the creation. + + + + + Sets the values of this dictionary by reading values out of the given object. + The given object must be of the type that this dictionary is based on. + + The object to read values from. + + + + Creates a new dictionary containing copies of all the properties in this dictionary. + Changes made to the new dictionary will not be reflected in this dictionary and vice versa. + + A clone of this dictionary. + + + + Sets the values of this dictionary by reading values from another dictionary. + The other dictionary must be based on the same type as this dictionary, or a type derived + from the type for this dictionary. + + The dictionary to read values from. + + + + Gets the dictionary item for the property with the given name. + This method checks that the given name is valid. + + The property name. + The item. + + + + Sets the value of the property only if it is different from the current value and is not + an invalid attempt to set a complex property. + + + + + Gets the set of names of all properties in this dictionary as a read-only set. + + The property names. + + + + Gets or sets the value of the property with the specified property name. + The value may be a nested instance of this class. + + The property name. + The value of the property. + + + + Gets the entity type of complex type that this dictionary is based on. + + The type of the object underlying this dictionary. + + + + Gets the internal context with which the underlying entity or complex type is associated. + + The internal context. + + + + Gets a value indicating whether the object for this dictionary is an entity or a complex object. + + true if this this is a dictionary for an entity; false if it is a dictionary for a complex object. + + + + Initializes a new instance of the class by copying + values from the given dictionary. + + The dictionary to clone. + If non-null, then the values for the new dictionary are taken from this record rather than from the original dictionary. + + + + Gets the dictionary item for a given property name. + + Name of the property. + An item for the given name. + + + + Gets the set of names of all properties in this dictionary as a read-only set. + + The property names. + + + + Service used to search for instance properties on a DbContext class that can + be assigned a DbSet instance. Also, if the the property has a public setter, + then a delegate is compiled to set the property to a new instance of DbSet. + All of this information is cached per app domain. + + + + + Creates a set discovery service for the given derived context. + + + + + Processes the given context type to determine the DbSet or IDbSet + properties and collect root entity types from those properties. Also, delegates are + created to initialize any of these properties that have public setters. + If the type has been processed previously in the app domain, then all this information + is returned from a cache. + + A dictionary of potential entity type to the list of the names of the properties that used the type. + + + + Calls the public setter on any property found to initialize it to a new instance of DbSet. + + + + + Registers the entities and their entity set name hints with the given . + + The model builder. + + + + Returns false if SuppressDbSetInitializationAttribute is found on the property or the class, otherwise + returns true. + + + + + Determines whether or not an instance of DbSet/ObjectSet can be assigned to a property of the given type. + + The type to check. + The entity type of the DbSet/ObjectSet that can be assigned, or null if no set type can be assigned. + + + + + Represents an Entity Data Model (EDM) created by the . + The Compile method can be used to go from this EDM representation to a + which is a compiled snapshot of the model suitable for caching and creation of + or instances. + + + + + Initializes a new instance of the class. + + + + + Creates a for this mode which is a compiled snapshot + suitable for caching and creation of instances. + + The compiled model. + + + + A snapshot of the that was used to create this compiled model. + + + + + Provides runtime information about a given type. + + + + + Creates a new instance representing a given type. + + The type deriving from . + + + + Creates a new instance representing a given targeting a specific database. + + The type deriving from . + Connection information for the database to be used. + + + + Creates a new instance representing a given type. An external list of + connection strings can be supplied and will be used during connection string resolution in place + of any connection strings specified in external configuration files. + + + It is preferable to use the constructor that accepts the entire config document instead of using this + constructor. Providing the entire config document allows DefaultConnectionFactroy entries in the config + to be found in addition to explicitly specified connection strings. + + The type deriving from . + A collection of connection strings. + + + + Creates a new instance representing a given type. An external config + object (e.g. app.config or web.config) can be supplied and will be used during connection string + resolution. This includes looking for connection strings and DefaultConnectionFactory entries. + + The type deriving from . + An object representing the config file. + + + + Creates a new instance representing a given , targeting a specific database. + An external config object (e.g. app.config or web.config) can be supplied and will be used during connection string + resolution. This includes looking for connection strings and DefaultConnectionFactory entries. + + The type deriving from . + An object representing the config file. + Connection information for the database to be used. + + + + Creates a new instance representing a given type. A + can be supplied in order to override the default determined provider used when constructing + the underlying EDM model. + + The type deriving from . + A specifying the underlying ADO.NET provider to target. + + + + Called internally when a context info is needed for an existing context, which may not be constructable. + + The context instance to get info from. + + + + If instances of the underlying type can be created, returns + a new instance; otherwise returns null. + + A instance. + + + + The concrete type. + + + + + Whether or not instances of the underlying type can be created. + + + + + The connection string used by the underlying type. + + + + + The connection string name used by the underlying type. + + + + + The ADO.NET provider name of the connection used by the underlying type. + + + + + The origin of the connection string used by the underlying type. + + + + + An action to be run on the DbModelBuilder after OnModelCreating has been run on the context. + + + + + Allows the construction and modification of additional constraints that can be applied to a specific use of a primitive type in an Entity Data Model (EDM) item. See . + + + + + Returns true if any facet value property currently has a non-null value; otherwise returns false . + + + + + Gets or sets an optional value indicating the current constraint on the type's maximum length. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered to have its intrinsic maximum length, rather than a specific value. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered to have a fixed or variable length. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered to be Unicode or non-Unicode. + + + + + Gets or sets an optional value indicating the current constraint on the type's precision. + + + + + Gets or sets an optional value indicating the current constraint on the type's scale. + + + + + Allows the construction and modification of a constraint applied to an Entity Data Model (EDM) association. + + + + + Gets or sets the that represents the 'dependent' end of the constraint; properties from this association end's entity type contribute to the collection. + + + + + Gets or sets the collection of instances from the of the constraint. The values of these properties are constrained against the primary key values of the remaining, 'principal' association end's entity type. + + + + + Represents moving a table from one schema to another. + + + + + Initializes a new instance of the MoveTableOperation class. + + Name of the table to be moved. + Name of the schema to move the table to. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table to be moved. + + + + + Gets the name of the schema to move the table to. + + + + + Gets an operation that moves the table back to its original schema. + + + + + + + + Represents an error that occurs when there are pending model changes after applying the last migration and automatic migration is disabled. + + + + + Represents errors that occur inside the Code First Migrations pipeline. + + + + + Initializes a new instance of the MigrationsException class. + + The message that describes the error. + + + + Initializes a new instance of the MigrationsException class with serialized data. + + The that holds the serialized object data about the exception being thrown. + The that contains contextual information about the source or destination. + + + + Initializes a new instance of the AutomaticMigrationsDisabledException class. + + The message that describes the error. + + + + Represents an error that occurs when an automatic migration would result in data loss. + + + + + Initializes a new instance of the AutomaticDataLossException class. + + The message that describes the error. + + + + Represents a code-based migration that has been scaffolded and is ready to be written to a file. + + + + + Gets or sets the unique identifier for this migration. + Typically used for the file name of the generated code. + + + + + Gets or sets the scaffolded migration code that the user can edit. + + + + + Gets or sets the scaffolded migration code that should be stored in a code behind file. + + + + + Gets or sets the programming language used for this migration. + Typically used for the file extension of the generated code. + + + + + Gets or sets the subdirectory in the user's project that this migration should be saved in. + + + + + A set of extension methods for + + + + + Adds or updates entities by key when SaveChanges is called. Equivalent to an "upsert" operation + from database terminology. + This method can useful when seeding data using Migrations. + + The entities to add or update. + + When the parameter is a custom or fake IDbSet implementation, this method will + attempt to locate and invoke a public, instance method with the same signature as this extension method. + + + + + Adds or updates entities by a custom identification expression when SaveChanges is called. + Equivalent to an "upsert" operation from database terminology. + This method can useful when seeding data using Migrations. + + + An expression specifying the properties that should be used when determining + whether an Add or Update operation should be performed. + + The entities to add or update. + + When the parameter is a custom or fake IDbSet implementation, this method will + attempt to locate and invoke a public, instance method with the same signature as this extension method. + + + + + Represents setting the database initializer for a specific context type + + + + + Represents information about a database connection. + + + + + Creates a new instance of DbConnectionInfo representing a connection that is specified in the application configuration file. + + The name of the connection string in the application configuration. + + + + Creates a new instance of DbConnectionInfo based on a connection string. + + The connection string to use for the connection. + The name of the provider to use for the connection. Use 'System.Data.SqlClient' for SQL Server. + + + + Gets the connection information represented by this instance. + + Configuration to use if connection comes from the configuration file. + + + + Convention to discover foreign key properties whose names are a combination + of the dependent navigation property name and the principal type primary key property name(s). + + + + + Convention to process instances of found on navigation properties in the model. + + + + + Convention to process instances of found on types in the model. + + + + + True if this configuration can be replaced in the model configuration, false otherwise + This is only set to true for configurations that are registered automatically via the DbContext + + + + + Indicates what parts of a configuration are overridable. + + + + + Nothing in the configuration is overridable. + + + + + The configuration values related to C-Space are overridable. + + + + + The configuration values only related to S-Space are overridable. + + + + + This is a temporary adapter class that wraps an and + presents it as an . This class will be removed once + we roll into the System.Data.Entity assembly. See + for more details. + + + + + This is version of an internal interface that already exists in System.Data.Entity that + is implemented by . Using this interface allows state + entries to be mocked for unit testing. The plan is to remove this version of the + interface and use the one in System.Data.Entity once we roll into the framework. + Note that some members may need to be added to the interface in the framework when + we combine the two. + + + + + A concrete implementation of used for properties of complex objects. + + + + + Initializes a new instance of the class. + + The parent property entry. + The property metadata. + + + + Creates a delegate that will get the value of this property. + + The delegate. + + + + Creates a delegate that will set the value of this property. + + The delegate. + + + + Returns true if the property of the entity that this property is ultimately part + of is set as modified. Since this is a property of a complex object + this method returns true if the top-level complex property on the entity is modified. + + True if the entity property is modified. + + + + Sets the property of the entity that this property is ultimately part of to modified. + Since this is a property of a complex object this method marks the top-level + complex property as modified. + + + + + Returns parent property, or null if this is a property on the top-level entity. + + + + + Gets the current values of the parent complex property. + That is, the current values that contains the value for this property. + + The parent current values. + + + + Gets the original values of the parent complex property. + That is, the original values that contains the value for this property. + + The parent original values. + + + + An implementation of that is based on an existing + instance. + + + + + Initializes a new instance of the class. + + The internal context. + The type. + The data record. + If set to true this is a dictionary for an entity, otherwise it is a dictionary for a complex object. + + + + Gets the dictionary item for a given property name. + + Name of the property. + An item for the given name. + + + + Gets the set of names of all properties in this dictionary as a read-only set. + + The property names. + + + + An is an where the + instance that it wraps is set immediately at construction time rather than being created lazily. In this case + the internal context may or may not own the instance but will only dispose it + if it does own it. + + + + + An underlies every instance of and wraps an + instance. + The also acts to expose necessary information to other parts of the design in a + controlled manner without adding a lot of internal methods and properties to the + class itself. + Two concrete classes derive from this abstract class - and + . + + + + + Initializes the object with its owner. + + The owner . + + + + Returns the underlying without causing the underlying database to be created + or the database initialization strategy to be executed. + This is used to get a context that can then be used for database creation/initialization. + + + + + Creates a cloned ObjectContext suitable for use with DDL operations. + + + + + Creates a new temporary based on the same metadata and connection as the real + and sets it as the context to use DisposeTempObjectContext is called. + This allows this internal context and its DbContext to be used for transient operations + such as initializing and seeding the database, after which it can be thrown away. + This isolates the real from any changes made and and saves performed. + + + + + If a temporary ObjectContext was set with UseTempObjectContext, then this method disposes that context + and returns this internal context and its DbContext to using the real ObjectContext. + + + + + Internal implementation of . + + True if the model hash in the context and the database match; false otherwise. + + + + Called by methods of to create a database either using the Migrations pipeline + if possible and the core provider otherwise. + + The context to use for core provider calls. + + + + Checks whether the given model (an EDMX document) matches the current model. + + + + + Queries the database for a model hash and returns it if found or returns null if the table + or the row doesn't exist in the database. + + The model hash, or null if not found. + + + + Queries the database for a model stored in the MigrationHistory table and returns it as an EDMX, or returns + null if the database does not contain a model. + + + + + Saves the model hash from the context to the database. + + + + + Performs the initialization action that may result in a and + handle the exception to provide more meaning to the user. + + The action. + + + + Registers for the ObjectStateManagerChanged event on the underlying ObjectStateManager. + This is a virtual method on this class so that it can be mocked. + + The event handler. + + + + Checks whether or not the given object is in the context in any state other than Deleted. + This is a virtual method on this class so that it can be mocked. + + The entity. + true if the entity is in the context and not deleted; otherwise false. + + + + Saves all changes made in this context to the underlying database. + + The number of objects written to the underlying database. + + + + Initializes this instance, which means both the context is initialized and the underlying + database is initialized. + + + + + Initializes the underlying ObjectContext but does not cause the database to be initialized. + + + + + Runs the unless it has already been run or there + is no initializer for this context type in which case this method does nothing. + + + + + Marks the database as having been initialized without actually running the . + + + + + Runs the if one has been set for this context type. + Calling this method will always cause the initializer to run even if the database is marked + as initialized. + + + + + Disposes the context. Override the DisposeContext method to perform + additional work when disposing. + + + + + Performs additional work to dispose a context. The default implementation + does nothing. + + + + + Calls DetectChanges on the underlying if AutoDetectChangesEnabled is + true or if force is set to true. + + if set to true then DetectChanges is called regardless of the value of AutoDetectChangesEnabled. + + + + Returns the DbSet instance for the given entity type. + This property is virtual and returns to that it can be mocked. + + The entity type for which a set should be returned. + A set for the given entity type. + + + + Returns the non-generic instance for the given entity type. + This property is virtual and returns to that it can be mocked. + + The entity type for which a set should be returned. + A set for the given entity type. + + + + Creates an internal set using an app domain cached delegate. + + Type of the entity. + The set. + + + + Returns the entity set and the base type for that entity set for the given type. + This method does o-space loading if required and throws if the type is not in the model. + + The entity type to lookup. + The entity set and base type pair. + + + + Returns the entity set and the base type for that entity set for the given type if that + type is mapped in the model, otherwise returns null. + This method does o-space loading if required. + + The entity type to lookup. + The entity set and base type pair, or null if not found. + + + + Checks whether or not the given entity type is mapped in the model. + + The entity type to lookup. + True if the type is mapped as an entity; false otherwise. + + + + Gets the local entities of the type specified from the state manager. That is, all + Added, Modified, and Unchanged entities of the given type. + + The type of entity to get. + The entities. + + + + Executes the given SQL query against the database backing this context. The results are not materialized as + entities or tracked. + + The type of the element. + The SQL. + The parameters. + The query results. + + + + Executes the given SQL query against the database backing this context. The results are not materialized as + entities or tracked. + + Type of the element. + The SQL. + The parameters. + The query results. + + + + Calls the generic ExecuteSqlQuery but with a non-generic return type so that it + has the correct signature to be used with CreateDelegate above. + + + + + Executes the given SQL command against the database backing this context. + + The SQL. + The parameters. + The return value from the database. + + + + Gets the underlying for the given entity, or returns null if the entity isn't tracked by this context. + This method is virtual so that it can be mocked. + + The entity. + The state entry or null. + + + + Gets the underlying objects for all entities tracked by + this context. + This method is virtual so that it can be mocked. + + State entries for all tracked entities. + + + + Gets the underlying objects for all entities of the given + type tracked by this context. + This method is virtual so that it can be mocked. + + The type of the entity. + State entries for all tracked entities of the given type. + + + + Helper method that gets the underlying objects for all entities that + match the given predicate. + + + + + Wraps the given in either a or + a depending on the actual exception type and the state + entries involved. + + The update exception. + A new exception wrapping the given exception. + + + + Uses the underlying context to create an entity such that if the context is configured + to create proxies and the entity is suitable then a proxy instance will be returned. + This method is virtual so that it can be mocked. + + The type of the entity. + The new entity instance. + + + + Uses the underlying context to create an entity such that if the context is configured + to create proxies and the entity is suitable then a proxy instance will be returned. + This method is virtual so that it can be mocked. + + The type of entity to create. + The new entity instance. + + + + This method is used by CreateDelegate to transform the CreateObject method with return type TEntity + into a method with return type object which matches the required type of the delegate. + + + + + Replaces the connection that will be used by this context. + The connection can only be changed before the context is initialized. + + The new connection. + + + + Throws if the context has been disposed. + + + + + Checks whether or not the internal cache of types to entity sets has been initialized, + and initializes it if necessary. + + + + + Forces all DbSets to be initialized, which in turn causes o-space loading to happen + for any entity type for which we have a DbSet. This includes all DbSets that were + discovered on the user's DbContext type. + + + + + Performs o-space loading for the type and returns false if the type is not in the model. + + + + + Performs o-space loading for the type and throws if the type is not in the model. + + Type of the entity. + + + + Returns true if the given entity type does not have EdmEntityTypeAttribute but is in + an assembly that has EdmSchemaAttribute. This indicates mixing of POCO and EOCO in the + same assembly, which is something that we don't support. + + + + + Determines whether or not the given clrType is mapped to a complex type. Assumes o-space loading has happened. + + + + + Updates the cache of types to entity sets either for the first time or after potentially + doing some o-space loading. + + + + + The public context instance that owns this internal context. + + + + + Returns the underlying . + + + + + Gets the temp object context, or null if none has been set. + + The temp object context. + + + + The compiled model created from the Code First pipeline, or null if Code First was + not used to create this context. + Causes the Code First pipeline to be run to create the model if it has not already been + created. + + + + + Gets the default database initializer to use for this context if no other has been registered. + For code first this property returns a instance. + For database/model first, this property returns null. + + The default initializer. + + + + Gets or sets a value indicating whether lazy loading is enabled. + + + + + Gets or sets a value indicating whether proxy creation is enabled. + + + + + Gets or sets a value indicating whether DetectChanges is called automatically in the API. + + + + + Gets or sets a value indicating whether to validate entities when is called. + + + + + True if the context has been disposed. + + + + + The connection underlying this context. Accessing this property does not cause the context + to be initialized, only its connection. + + + + + The connection string as originally applied to the context. This is used to perform operations + that need the connection string in a non-mutated form, such as with security info still intact. + + + + + Returns the origin of the underlying connection string. + + + + + Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries, + database intializers and connection strings. + + + + + Gets or sets the provider details to be used when building the EDM model. + + + + + Gets the provider name bsing used either using a cached value or getting it from + the DbConnection in use. + + + + + Gets the name of the underlying connection string. + + + + + Gets or sets a custom OnModelCreating action. + + + + + Gets the DatabaseOperations instance to use to perform Create/Delete/Exists operations + against the database. + Note that this virtual property can be mocked to help with unit testing. + + + + + Gets instance used to create validators and validation contexts. + This property is virtual to allow mocking. + + + + + For mocking. + + + + + Constructs an for an already existing . + + The owner . + The existing . + + + + Returns the underlying without causing the underlying database to be created + or the database initialization strategy to be executed. + This is used to get a context that can then be used for database creation/initialization. + + + + + Does nothing, since the already exists. + + + + + Does nothing since the database is always considered initialized if the was created + from an existing . + + + + + Does nothing since the database is always considered initialized if the was created + from an existing . + + + + + Disposes the context. The underlying is also disposed if it is owned. + + + + + + + + Returns the underlying . + + + + + Gets the default database initializer to use for this context if no other has been registered. + For code first this property returns a instance. + For database/model first, this property returns null. + + The default initializer. + + + + The connection underlying this context. + + + + + The connection string as originally applied to the context. This is used to perform operations + that need the connection string in a non-mutated form, such as with security info still intact. + + + + + Returns the origin of the underlying connection string. + + + + + Gets or sets a value indicating whether lazy loading is enabled. This is just a wrapper + over the same flag in the underlying . + + + + + Gets or sets a value indicating whether proxy creation is enabled. This is just a wrapper + over the same flag in the underlying ObjectContext. + + + + + An implementation of IDatabaseInitializer that will DELETE, recreate, and optionally re-seed the + database only if the model has changed since the database was created. + + + Whether or not the model has changed is determined by the + method. + To seed the database create a derived class and override the Seed method. + + + + + Executes the strategy to initialize the database for the given context. + + The context. + + + + A that should be overridden to actually add data to the context for seeding. + The default implementation does nothing. + + The context to seed. + + + + RuleSet for DataModel Validation + + + + + Get the related rules given certain DataModelItem + + The to validate + A collection of + + + + The acceptable range for this enum is 0000 - 0999; the range 10,000-15,000 is reserved for tools. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Precision out of range + + + + + Scale out of range + + + + + + + + + + + + + One of the required facets is missing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The facet isn't allow by the property type. + + + + + This facet value is constant and is specified in the schema + + + + + + + + + + + + + Multiplicity value was malformed + + + + + The value for the Action attribute is invalid or not allowed in the current context + + + + + An error occurred processing the On<Operation> elements + + + + + Ends were given for the Property element of a EntityContainer that is not a RelationshipSet + + + + + The extent name used in the EntittyContainerType End does not match the name of any of the EntityContainerProperties in the containing EntityContainer + + + + + An end element was not given, and cannot be inferred because too many EntityContainerEntitySet elements that are good possibilities. + + + + + An end element was not given, and cannot be inferred because there is no EntityContainerEntitySets that are the correct type to be used as an EntitySet. + + + + + Not a valid parameter direction for the parameter in a function + + + + + Unable to infer an optional schema part, to resolve this; be more explicit + + + + + Invalid facet attribute(s) specified in provider manifest + + + + + Invalid role value in the relationship constraint + + + + + Invalid Property in relationship constraint + + + + + Type mismatch between ToProperty and FromProperty in the relationship constraint + + + + + Invalid multiplicity in FromRole in the relationship constraint + + + + + The number of properties in the FromProperty and ToProperty in the relationship constraint must be identical + + + + + No Properties defined in either FromProperty or ToProperty in the relationship constraint + + + + + Missing constraint in relationship type in ssdl + + + + + Same role referred in the ToRole and FromRole of a referential constraint + + + + + Invalid value for attribute ParameterTypeSemantics + + + + + Invalid type used for a Relationship End Type + + + + + Invalid PrimitiveTypeKind + + + + + Invalid TypeConversion DestinationType + + + + + Expected a integer value between 0 - 255 + + + + + Invalid Type specified in function + + + + + Precision must not be greater than 28 + + + + + Properties that are part of entity key must be of scalar type + + + + + Binary type properties which are part of entity key are currently not supported + + + + + The primitive type kind does not have a preferred mapping + + + + + More than one PreferredMapping for a PrimitiveTypeKind + + + + + End with * multiplicity cannot have operations specified + + + + + EntitySet type has no keys + + + + + InvalidNumberOfParametersForAggregateFunction + + + + + InvalidParameterTypeForAggregateFunction + + + + + Composable functions must declare a return type. + + + + + Non-composable functions must not declare a return type. + + + + + Non-composable functions do not permit the aggregate; niladic; or built-in attributes. + + + + + Composable functions can not include command text attribute. + + + + + Functions should not declare both a store name and command text (only one or the other can be used). + + + + + SystemNamespace + + + + + Empty DefiningQuery text + + + + + Schema, Table and DefiningQuery are all specified, and are mutually exclusive + + + + + ConcurrencyMode value was malformed + + + + + Concurrency can't change for any sub types of an EntitySet type. + + + + + Function import return type must be either empty, a collection of entities, or a singleton scalar. + + + + + Function import specifies a non-existent entity set. + + + + + Function import specifies entity type return but no entity set. + + + + + Function import specifies entity type that does not derive from element type of entity set. + + + + + Function import specifies a binding to an entity set but does not return entities. + + + + + InternalError + + + + + Same Entity Set Taking part in the same role of the relationship set in two different relationship sets + + + + + Entity key refers to the same property twice + + + + + Function declares a ReturnType attribute and element + + + + + Nullable Complex Type not supported in Edm V1 + + + + + Only Complex Collections supported in Edm V1.1 + + + + + No Key defined on Entity Type + + + + + Invalid namespace specified in using element + + + + + Need not specify system namespace in using + + + + + Cannot use a reserved/system namespace as alias + + + + + Invalid qualification specified for type + + + + + Invalid Entity Container Name in extends attribute + + + + + Invalid CollectionKind value in property CollectionKind attribute + + + + + Must specify namespace or alias of the schema in which this type is defined + + + + + Entity Container cannot extend itself + + + + + Failed to retrieve provider manifest + + + + + Mismatched Provider Manifest token values in SSDL artifacts + + + + + Missing Provider Manifest token value in SSDL artifact(s) + + + + + Empty CommandText element + + + + + Inconsistent Provider values in SSDL artifacts + + + + + Inconsistent Provider Manifest token values in SSDL artifacts + + + + + Duplicated Function overloads + + + + + InvalidProvider + + + + + FunctionWithNonEdmTypeNotSupported + + + + + ComplexTypeAsReturnTypeAndDefinedEntitySet + + + + + ComplexTypeAsReturnTypeAndDefinedEntitySet + + + + unused 179, + unused 180, + unused 181, + + In model functions facet attribute is allowed only on ScalarTypes + + + + + Captures several conditions where facets are placed on element where it should not exist. + + + + + Return type has not been declared + + + + + Invalid value in the EnumTypeOption + + + + + The structural annotation cannot use codegen namespaces + + + + + Function and type cannot have the same fully qualified name + + + + + Cannot load different version of schema in the same ItemCollection + + + + + Expected bool value + + + + + End without Multiplicity specified + + + + + In SSDL, if composable function returns a collection of rows (TVF), all row properties must be of scalar types. + + + + + The name of NamedEdmItem must not be empty or white space only + + + + + EdmTypeReference is empty + + Unused 199; + + + + Allows the construction and modification a table in a database schema. + + + + + DbSchemaMetadataItem is the base for all types that can be contained in a schema. + + + + + Gets or sets the collection of instances that specifies the columns present within the table. + + + + + Gets or sets the collection of instances from the collection of the table that are part of the primary key. + + + + + Gets or sets the collection of instances that defines the foreign key constraints sourced from the table. + + + + + Allows the construction and modification of a database in a Database Metadata model. + + + + + Gets or sets an optional value that indicates the database model version. + + + + + Gets or sets the collection of instances that specifies the schemas within the database. + + + + + Denotes that the class is a complex type. + Complex types are non-scalar properties of entity types that enable scalar properties to be organized within entities. + Complex types do not have keys and cannot be managed by the Entity Framework apart from the parent object. + + + + + Convention to process instances of found on properties in the model. + + + + + Convention to process instances of found on properties in the model. + + + + + Validates entities or complex types implementing IValidatableObject interface. + + + + + Display attribute used to specify the display name for an entity or complex property. + + + + + Validates an entity or a complex type implementing IValidatableObject interface. + This method is virtual to allow mocking. + + Validation context. Never null. + + Property to validate. Null if this is the entity that will be validated. Never null if this + is the complex type that will be validated. + + Validation error as . Empty if no errors. Never null. + + + Note that is used to figure out what needs to be validated. If it not null the complex + type will be validated otherwise the entity will be validated. + Also if this is an IValidatableObject complex type but the instance (.CurrentValue) is null we won't validate + anything and will not return any errors. The reason for this is that Validation is supposed to validate using + information the user provided and not some additional implicit rules. (ObjectContext will throw for operations + that involve null complex properties). + + + + + Contracts for interface. + + + + + Contract for IValidator.Validate method. + + Validation context. + Property. + Nothing - always throws. + + + + Helper class that extends Tuple to give the Item1 and Item2 properties more meaningful names. + + + + + Creates a new pair of the given EntitySet and BaseType. + + + + + The EntitySet part of the pair. + + + + + The BaseType part of the pair. + + + + + A concrete implementation of used for properties of entities. + + + + + Initializes a new instance of the class. + + The internal entry. + The property info. + + + + Creates a delegate that will get the value of this property. + + The delegate. + + + + Creates a delegate that will set the value of this property. + + The delegate. + + + + Returns true if the property of the entity that this property is ultimately part + of is set as modified. Since this is a property of an entity this method returns + true if the property is modified. + + True if the entity property is modified. + + + + Sets the property of the entity that this property is ultimately part of to modified. + Since this is a property of an entity this method marks it as modified. + + + + + Returns parent property, or null if this is a property on the top-level entity. + + + + + Gets the current values of the parent entity. + That is, the current values that contains the value for this property. + + The parent current values. + + + + Gets the original values of the parent entity. + That is, the original values that contains the value for this property. + + The parent original values. + + + + An implementation of for an item in a . + + + + + Initializes a new instance of the class. + + The name. + The value. + The type. + If set to true this item represents a complex property. + + + + Gets or sets the value of the property represented by this item. + + The value. + + + + Gets the name of the property. + + The name. + + + + Gets a value indicating whether this item represents a complex property. + + + true If this instance represents a complex property; otherwise, false. + + + + + Gets the type of the underlying property. + + The property type. + + + + Instances of this class are returned from the Reference method of + and allow operations such as loading to + be performed on the an entity's reference navigation properties. + + The type of the entity to which this property belongs. + The type of the property. + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal reference entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Loads the entity from the database. + Note that if the entity already exists in the context, then it will not overwritten with values from the database. + + + + + Returns the query that would be used to load this entity from the database. + The returned query can be modified using LINQ to perform filtering or operations in the database. + + A query for the entity. + + + + Returns a new instance of the non-generic class for + the navigation property represented by this object. + + A non-generic version. + + + + Gets the property name. + + The property name. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references. + + The current value. + + + + Gets a value indicating whether the entity has been loaded from the database. + + true if the entity is loaded; otherwise, false. + + + + Gets the underlying as an . + + The internal member entry. + + + + The to which this navigation property belongs. + + An entry for the entity that owns this navigation property. + + + + A non-generic version of the class. + + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal collection entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Loads the collection of entities from the database. + Note that entities that already exist in the context are not overwritten with values from the database. + + + + + Returns the query that would be used to load this collection from the database. + The returned query can be modified using LINQ to perform filtering or operations in the database, such + as counting the number of entities in the collection in the database without actually loading them. + + A query for the collection. + + + + Returns the equivalent generic object. + + The type of entity on which the member is declared. + The type of the collection element. + The equivalent generic object. + + + + Gets the property name. + + The property name. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references. + + The current value. + + + + Gets a value indicating whether the collection of entities has been loaded from the database. + + true if the collection is loaded; otherwise, false. + + + + The to which this navigation property belongs. + + An entry for the entity that owns this navigation property. + + + + Gets the backing this object as an . + + The internal member entry. + + + + The RuleSet for EdmModel + + + + + Get based on version + + a double value of version + + + + + Returns true if the given two ends are similar - the relationship type that this ends belongs to is the same and the entity set refered by the ends are same and they are from the same role + + + + + + + + Return true if the Referential Constraint on the association is ready for further validation, otherwise return false. + + + + + + + Resolves the given property names to the property in the item Also checks whether the properties form the key for the given type and whether all the properties are nullable or not + + + + + + + + + + + Return true if the namespaceName is a Edm System Namespace + + + + + + + Return true if the entityType is a subtype of any entity type in the dictionary keys, and return the corresponding entry EntitySet value. Otherwise return false. + + + + + + + + + Return true if any of the properties in the EdmEntityType defines ConcurrencyMode. Otherwise return false. + + + + + + + Add member name to the Hash set, raise an error if the name exists already. + + + + + + + + + If the string is null, empty, or only whitespace, return false, otherwise return true + + + + + + + Determine if a cycle exists in the type hierarchy: use two pointers to walk the chain, if one catches up with the other, we have a cycle. + + true if a cycle exists in the type hierarchy, false otherwise + + + + Specifies the action to take on a given operation. + + + + + Default behavior + + + + + Restrict the operation + + + + + Cascade the operation + + + + + Specifies the minimum length of array/string data allowed in a property. + + + + + Initializes a new instance of the class. + + + The minimum allowable length of array/string data. + Value must be greater than or equal to zero. + + + + + Determines whether a specified object is valid. (Overrides ) + + + This method returns true if the is null. + It is assumed the is used if the value may not be null. + + The object to validate. + true if the value is null or greater than or equal to the specified minimum length, otherwise false + Length is less than zero. + + + + Applies formatting to a specified error message. (Overrides ) + + The name to include in the formatted string. + A localized string to describe the minimum acceptable length. + + + + Checks that Length has a legal value. Throws InvalidOperationException if not. + + + + + Gets the minimum allowable length of the array/string data. + + + + + Denotes a property used as a foreign key in a relationship. + The annotation may be placed on the foreign key property and specify the associated navigation property name, + or placed on a navigation property and specify the associated foreign key name. + + + + + Initializes a new instance of the class. + + + If placed on a foreign key property, the name of the associated navigation property. + If placed on a navigation property, the name of the associated foreign key(s). + If a navigation property has multiple foreign keys, a comma separated list should be supplied. + + + + + If placed on a foreign key property, the name of the associated navigation property. + If placed on a navigation property, the name of the associated foreign key(s). + + + + + Represents renaming an existing table. + + + + + Initializes a new instance of the RenameTableOperation class. + + Name of the table to be renamed. + New name for the table. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table to be renamed. + + + + + Gets the new name for the table. + + + + + Gets an operation that reverts the rename. + + + + + + + + Convention to discover foreign key properties whose names match the principal type primary key property name(s). + + + + + Convention to process instances of found on properties in the model. + + + + + Allows configuration to be performed for an complex type in a model. + + A ComplexTypeConfiguration can be obtained via the ComplexType method on + or a custom type derived from ComplexTypeConfiguration + can be registered via the Configurations property on . + + The complex type to be configured. + + + + Initializes a new instance of ComplexTypeConfiguration + + + + + This attribute can be applied to either an entire derived class or to + individual or properties on that class. When applied + any discovered or properties will still be included + in the model but will not be automatically initialized. + + + + + A DbSet represents the collection of all entities in the context, or that can be queried from the + database, of a given type. DbSet objects are created from a DbContext using the DbContext.Set method. + + + Note that DbSet does not support MEST (Multiple Entity Sets per Type) meaning that there is always a + one-to-one correlation between a type and a set. + + The type that defines the set. + + + + Creates a new set that will be backed by the given . + + The internal set. + + + + Finds an entity with the given primary key values. + If an entity with the given primary key values exists in the context, then it is + returned immediately without making a request to the store. Otherwise, a request + is made to the store for an entity with the given primary key values and this entity, + if found, is attached to the context and returned. If no entity is found in the + context or the store, then null is returned. + + + The ordering of composite key values is as defined in the EDM, which is in turn as defined in + the designer, by the Code First fluent API, or by the DataMember attribute. + + The values of the primary key for the entity to be found. + The entity found, or null. + Thrown if multiple entities exist in the context with the primary key values given. + Thrown if the type of entity is not part of the data model for this context. + Thrown if the types of the key values do not match the types of the key values for the entity type to be found. + Thrown if the context has been disposed. + + + + Attaches the given entity to the context underlying the set. That is, the entity is placed + into the context in the Unchanged state, just as if it had been read from the database. + + The entity to attach. + The entity. + + Attach is used to repopulate a context with an entity that is known to already exist in the database. + SaveChanges will therefore not attempt to insert an attached entity into the database because + it is assumed to already be there. + Note that entities that are already in the context in some other state will have their state set + to Unchanged. Attach is a no-op if the entity is already in the context in the Unchanged state. + + + + + Adds the given entity to the context underlying the set in the Added state such that it will + be inserted into the database when SaveChanges is called. + + The entity to add. + The entity. + + Note that entities that are already in the context in some other state will have their state set + to Added. Add is a no-op if the entity is already in the context in the Added state. + + + + + Marks the given entity as Deleted such that it will be deleted from the database when SaveChanges + is called. Note that the entity must exist in the context in some other state before this method + is called. + + The entity to remove. + The entity. + + Note that if the entity exists in the context in the Added state, then this method + will cause it to be detached from the context. This is because an Added entity is assumed not to + exist in the database such that trying to delete it does not make sense. + + + + + Creates a new instance of an entity for the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The entity instance, which may be a proxy. + + + + Creates a new instance of an entity for the type of this set or for a type derived + from the type of this set. + Note that this instance is NOT added or attached to the set. + The instance returned will be a proxy if the underlying context is configured to create + proxies and the entity type meets the requirements for creating a proxy. + + The type of entity to create. + The entity instance, which may be a proxy. + + + + Returns the equivalent non-generic object. + + The non-generic set object. + + + + Creates a raw SQL query that will return entities in this set. By default, the + entities returned are tracked by the context; this can be changed by calling + AsNoTracking on the returned. + Note that the entities returned are always of the type for this set and never of + a derived type. If the table or tables queried may contain data for other entity + types, then the SQL query must be written appropriately to ensure that only entities of + the correct type are returned. + + The SQL query string. + The parameters to apply to the SQL query string. + A object that will execute the query when it is enumerated. + + + + Gets an that represents a local view of all Added, Unchanged, + and Modified entities in this set. This local view will stay in sync as entities are added or + removed from the context. Likewise, entities added to or removed from the local view will automatically + be added to or removed from the context. + + + This property can be used for data binding by populating the set with data, for example by using the Load + extension method, and then binding to the local data through this property. For WPF bind to this property + directly. For Windows Forms bind to the result of calling ToBindingList on this property + + The local view. + + + + The internal IQueryable that is backing this DbQuery + + + + + + Gets or sets the that defines the source end of the association. + + + + + Gets or sets the that defines the target end of the association. + + + + + Gets or sets the optional constraint that indicates whether the relationship is an independent association (no constraint present) or a foreign key relationship ( specified). + + + + + Gets or sets an value representing the model that is being mapped. + + + + + Gets or sets a value representing the database that is the target of the mapping. + + + + + Gets or sets the collection of s that specifies how the model's entity containers are mapped to the database. + + + + + Specifies how the database generates values for a property. + + + + + Initializes a new instance of the class. + + The pattern used to generate values for the property in the database. + + + + The pattern used to generate values for the property in the database. + + + + + Represents dropping an existing index. + + + + + Initializes a new instance of the DropIndexOperation class. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Initializes a new instance of the DropIndexOperation class. + + The operation that represents reverting dropping the index. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets an operation that represents reverting dropping the index. + The inverse cannot be automatically calculated, + if it was not supplied to the constructor this property will return null. + + + + + + + + Helper class that is used to further configure a table being created from a CreateTable call on . + + + + + Initializes a new instance of the TableBuilder class. + + The table creation operation to be further configured. + The migration the table is created in. + + + + Specifies a primary key for the table. + + + A lambda expression representing the property to be used as the primary key. + C#: t => t.Id + VB.Net: Function(t) t.Id + + If the primary key is made up of multiple properties then specify an anonymous type including the properties. + C#: t => new { t.Id1, t.Id2 } + VB.Net: Function(t) New With { t.Id1, t.Id2 } + + + The name of the primary key. + If null is supplied, a default name will be generated. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + Itself, so that multiple calls can be chained. + + + + Specifies an index to be created on the table. + + + A lambda expression representing the property to be indexed. + C#: t => t.PropertyOne + VB.Net: Function(t) t.PropertyOne + + If multiple properties are to be indexed then specify an anonymous type including the properties. + C#: t => new { t.PropertyOne, t.PropertyTwo } + VB.Net: Function(t) New With { t.PropertyOne, t.PropertyTwo } + + A value indicating whether or not this is a unique index. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + Itself, so that multiple calls can be chained. + + + + Specifies a foreign key constraint to be created on the table. + + Name of the table that the foreign key constraint targets. + + A lambda expression representing the properties of the foreign key. + C#: t => t.PropertyOne + VB.Net: Function(t) t.PropertyOne + + If multiple properties make up the foreign key then specify an anonymous type including the properties. + C#: t => new { t.PropertyOne, t.PropertyTwo } + VB.Net: Function(t) New With { t.PropertyOne, t.PropertyTwo } + + A value indicating whether or not cascade delete should be configured on the foreign key constraint. + + + The name of this foreign key constraint. + If no name is supplied, a default name will be calculated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + Itself, so that multiple calls can be chained. + + + + Exception thrown from when an exception is thrown from the validation + code. + + + + + Initializes a new instance of DbUnexpectedValidationException + + The exception message. + + + + Initializes a new instance of DbUnexpectedValidationException + + The exception message. + + + + Initializes a new instance of DbUnexpectedValidationException + + The exception message. + The inner exception. + + + + Initializes a new instance of DbUnexpectedValidationException with the specified serialization info and + context. + + The serialization info. + The streaming context. + + + + Exception thrown from when validating entities fails. + + + + + Initializes a new instance of DbEntityValidationException + + + + + Initializes a new instance of DbEntityValidationException + + The exception message. + + + + Initializes a new instance of DbEntityValidationException + + The exception message. + Validation results. + + + + Initializes a new instance of DbEntityValidationException + + The exception message. + The inner exception. + + + + Initializes a new instance of DbEntityValidationException + + The exception message. + Validation results. + The inner exception. + + + + Subscribes the SerializeObjectState event. + + + + + Validation results. + + + + + Holds exception state that will be serialized when the exception is serialized. + + + + + Validation results. + + + + + Completes the deserialization. + + The deserialized object. + + + + Validation results. + + + + + captalize the return word if the parameter is capitalized + if word is "Table", then return "Tables" + + + + + + + + separate one combine word in to two parts, prefix word and the last word(suffix word) + + + + + + + + return true when the word is "[\s]*" or leading or tailing with spaces + or contains non alphabetical characters + + + + + + + This method allow you to add word to internal PluralizationService of English. + If the singluar or the plural value was already added by this method, then an ArgumentException will be thrown. + + + + + + + A is a concrete type that will lazily create the + underlying when needed. The created is owned by the + internal context and will be disposed when the internal context is disposed. + + + + + Constructs a for the given owner that will be initialized + on first use. + + The owner . + Responsible for creating a connection lazily when the context is used for the first time. + The model, or null if it will be created by convention + + + + Returns the underlying without causing the underlying database to be created + or the database initialization strategy to be executed. + This is used to get a context that can then be used for database creation/initialization. + + + + + Saves all changes made in this context to the underlying database, but only if the + context has been initialized. If the context has not been initialized, then this + method does nothing because there is nothing to do; in particular, it does not + cause the context to be initialized. + + The number of objects written to the underlying database. + + + + Disposes the context. The underlying is also disposed. + The connection to the database ( object) is also disposed if it was created by + the context, otherwise it is not disposed. + + + + + + + + Initializes the underlying . + + + + + Creates an immutable, cacheable representation of the model defined by this builder. + This model can be used to create an or can be passed to a + constructor to create a for this model. + + + + + + Creates and configures the instance that will be used to build the + . + + Public for testing. + The builder. + + + + Marks the database as having been initialized without actually running the . + + + + + Runs the unless it has already been run or there + is no initializer for this context type in which case this method does nothing. + + + + + Performs some action (which may do nothing) in such a way that it is guaranteed only to be run + once for the model and connection in this app domain, unless it fails by throwing an exception, + in which case it will be re-tried next time the context is initialized. + + The action. + + + + Returns the underlying . + + + + + The compiled model created from the Code First pipeline, or null if Code First was + not used to create this context. + Causes the Code First pipeline to be run to create the model if it has not already been + created. + + + + + The actually being used, which may be the + temp context for initialization or the real context. + + + + + The connection underlying this context. Accessing this property does not cause the context + to be initialized, only its connection. + + + + + The connection string as originally applied to the context. This is used to perform operations + that need the connection string in a non-mutated form, such as with security info still intact. + + + + + Returns the origin of the underlying connection string. + + + + + Gets or sets an object representing a config file used for looking for DefaultConnectionFactory entries + and connection strings. + + + + + Gets the name of the underlying connection string. + + + + + Gets or sets the provider details to be used when building the EDM model. + + + + + + + + Gets or sets a custom OnModelCreating action. + + + + + Gets the default database initializer to use for this context if no other has been registered. + For code first this property returns a instance. + For database/model first, this property returns null. + + The default initializer. + + + + Gets or sets a value indicating whether lazy loading is enabled. + If the exists, then this property acts as a wrapper over the flag stored there. + If the has not been created yet, then we store the value given so we can later + use it when we create the . This allows the flag to be changed, for example in + a DbContext constructor, without it causing the to be created. + + + + + Gets or sets a value indicating whether proxy creation is enabled. + If the ObjectContext exists, then this property acts as a wrapper over the flag stored there. + If the ObjectContext has not been created yet, then we store the value given so we can later + use it when we create the ObjectContext. This allows the flag to be changed, for example in + a DbContext constructor, without it causing the ObjectContext to be created. + + + + + The internal class used to implement , + and . + This internal class contains all the common implementation between the generic and non-generic + entry classes and also allows for a clean internal factoring without compromising the public API. + + + + + Initializes a new instance of the class. + + The internal entity entry. + The navigation metadata. + + + + Gets the navigation property value from the object. + For reference navigation properties, this means getting the value from the + object. + + The entity. + The navigation property value. + + + + Sets the navigation property value onto the object. + For reference navigation properties, this means setting the value onto the + object. + + The entity. + The value. + + + + Sets the given value on the given which must be an + . + This method is setup in such a way that it can easily be used by CreateDelegate without any + dynamic code generation needed. + + The type of the related entity. + The entity reference. + The value. + + + + Creates a new non-generic backed by this internal entry. + The runtime type of the DbMemberEntry created will be or a subtype of it. + + The new entry. + + + + Creates a new generic backed by this internal entry. + The runtime type of the DbMemberEntry created will be or a subtype of it. + + The type of the entity. + The type of the property. + The new entry. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references or the collection of references + for a collection property. + + The current value. + + + + An instances of this class is obtained from an object and can be used + to manage the actual database backing a DbContext or connection. + This includes creating, deleting, and checking for the existence of a database. + Note that deletion and checking for existence of a database can be performed using just a + connection (i.e. without a full context) by using the static methods of this class. + + + + + Creates a Database backed by the given context. This object can be used to create a database, + check for database existence, and delete a database. + + The context that defines the database connection and model. + + + + Gets or sets the database initialization strategy. The database initialization strategy is called when instance + is initialized from a . The strategy can optionally check for database existence, create a new database, and + seed the database with data. + The default strategy is an instance of created with useSeedData set + to true. + + The type of the context. + The strategy. + The database creation strategy. + + + + Internal version of SetInitializer that allows the strategy to be locked such that it cannot be replaced + by another call to SetInitializer. This allows strategies set in the app.config to win over strategies set + in code. + + The type of the context. + The strategy. + if set to true then the strategy is locked. + + + + Runs the the registered on this context. + + If "force" is set to true, then the initializer is run regardless of whether or not it + has been run before. This can be useful if a database is deleted while an app is running + and needs to be reinitialized. + + If "force" is set to false, then the initializer is only run if it has not already been + run for this context, model, and connection in this app domain. This method is typically + used when it is necessary to ensure that the database has been created and seeded + before starting some operation where doing so lazily will cause issues, such as when the + operation is part of a transaction. + + if set to true the initializer is run even if it has already been run. + + + + Checks whether or not the database is compatible with the the current Code First model. + + + Model compatibility currently uses the following rules. + + If the context was created using either the Model First or Database First approach then the + model is assumed to be compatible with the database and this method returns true. + + For Code First the model is considered compatible if the model is stored in the database + in the Migrations history table and that model has no differences from the current model as + determined by Migrations model differ. + + If the model is not stored in the database but an EF 4.1/4.2 model hash is found instead, + then this is used to check for compatibility. + + + If set to true then an exception will be thrown if no model metadata is found in + the database. If set to false then this method will return true if metadata + is not found. + + True if the model hash in the context and the database match; false otherwise. + + + + + Creates a new database on the database server for the model defined in the backing context. + Note that calling this method before the database initialization strategy has run will disable + executing that strategy. + + + + + Creates a new database on the database server for the model defined in the backing context, but only + if a database with the same name does not already exist on the server. + + True if the database did not exist and was created; false otherwise. + + + + Checks whether or not the database exists on the server. + + True if the database exists; false otherwise. + + + + Deletes the database on the database server if it exists, otherwise does nothing. + + True if the database did exist and was deleted; false otherwise. + + + + Checks whether or not the database exists on the server. + The connection to the database is created using the given database name or connection string + in the same way as is described in the documentation for the class. + + The database name or a connection string to the database. + True if the database exists; false otherwise. + + + + Deletes the database on the database server if it exists, otherwise does nothing. + The connection to the database is created using the given database name or connection string + in the same way as is described in the documentation for the class. + + The database name or a connection string to the database. + True if the database did exist and was deleted; false otherwise. + + + + Checks whether or not the database exists on the server. + + An existing connection to the database. + True if the database exists; false otherwise. + + + + Deletes the database on the database server if it exists, otherwise does nothing. + + An existing connection to the database. + True if the database did exist and was deleted; false otherwise. + + + + Resets the DefaultConnectionFactory to its initial value. + Currently, this method is only used by test code. + + + + + Performs the operation defined by the given delegate using the given lazy connection, ensuring + that the lazy connection is disposed after use. + + Information used to create a DbConnection. + The operation to perform. + The return value of the operation. + + + + Performs the operation defined by the given delegate against a connection. The connection + is either the connection accessed from the context backing this object, or is obtained from + the connection information passed to one of the static methods. + + The connection to use. + The operation to perform. + The return value of the operation. + + + + Returns an empty ObjectContext that can be used to perform delete/exists operations. + + The connection for which to create an ObjectContext + The empty context. + + + + Creates a raw SQL query that will return elements of the given generic type. + The type can be any type that has properties that match the names of the columns returned + from the query, or can be a simple primitive type. The type does not have to be an + entity type. The results of this query are never tracked by the context even if the + type of object returned is an entity type. Use the + method to return entities that are tracked by the context. + + The type of object returned by the query. + The SQL query string. + The parameters to apply to the SQL query string. + A object that will execute the query when it is enumerated. + + + + Creates a raw SQL query that will return elements of the given type. + The type can be any type that has properties that match the names of the columns returned + from the query, or can be a simple primitive type. The type does not have to be an + entity type. The results of this query are never tracked by the context even if the + type of object returned is an entity type. Use the + method to return entities that are tracked by the context. + + The type of object returned by the query. + The SQL query string. + The parameters to apply to the SQL query string. + A object that will execute the query when it is enumerated. + + + + Executes the given DDL/DML command against the database. + + The command string. + The parameters to apply to the command string. + The result returned by the database after executing the command. + + + + Returns the connection being used by this context. This may cause the context to be initialized + and the connection to be created if it does not already exist. + + Thrown if the context has been disposed. + + + + Returns the as a delegate that can be called with + an instance of the that owns this Database object, or returns null if + there is no initializer set for this context type. + + The initializer delegate or null. + + + + The connection factory to use when creating a from just + a database name or a connection string. + + + This is used when just a database name or connection string is given to or when + the no database name or connection is given to DbContext in which case the name of + the context class is passed to this factory in order to generate a DbConnection. + By default, the instance to use is read from the applications .config + file from the "EntityFramework DefaultConnectionFactory" entry in appSettings. If no entry is found in + the config file then is used. Setting this property in code + always overrides whatever value is found in the config file. + + + + + Checks wether or not the DefaultConnectionFactory has been set to something other than its default value. + + + + + Constants for CSDL XML. + + + + + Allows the construction and modification of a specific use of a type in an Entity Data Model (EDM) item. See for examples. + + + + + Gets or sets a value indicating the collection rank of the type reference. A collection rank greater than zero indicates that the type reference represents a collection of its referenced . + + + + + Gets or sets a value indicating the referenced by this type reference. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered nullable. + + + + + Gets or sets an optional instance that applies additional constraints to a referenced primitive type. + + + Accessing this property forces the creation of an EdmPrimitiveTypeFacets value if no value has previously been set. Use to determine whether or not this property currently has a value. + + + + + Gets a value indicating whether the property of this type reference has been assigned an value with at least one facet value specified. + + + + + Indicates whether this type reference represents a collection of its referenced (when is greater than zero) or not. + + + + + Indicates whether the property of this type reference currently refers to an , is not a collection type, and does not have primitive facet values specified. + + + + + Gets the currently referred to by this type reference, or null if the type reference is a collection type or does not refer to a complex type. + + + + + Indicates whether the property of this type reference currently refers to an and is not a collection type. + + + + + Gets the currently referred to by this type reference, or null if the type reference is a collection type or does not refer to a primitive type. + + + + + Allows the construction and modification of a namespace in an . + + + + + Gets all s declared within the namspace. Includes s, s, s. + + + + + Gets or sets the s declared within the namespace. + + + + + Gets or sets the s declared within the namespace. + + + + + Gets or sets the s declared within the namespace. + + + + + Allows the construction and modification of one end of an Entity Data Model (EDM) association. + + + + + Gets or sets the entity type referenced by this association end. + + + + + Gets or sets the of this association end, which indicates the multiplicity of the end and whether or not it is required. + + + + + Gets or sets the to take when a delete operation is attempted. + + + + + Specifies the database column that a property is mapped to. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The name of the column the property is mapped to. + + + + The name of the column the property is mapped to. + + + + + The zero-based order of the column the property is mapped to. + + + + + The database provider specific data type of the column the property is mapped to. + + + + + Represents a migration operation that has been translated into a SQL statement. + + + + + Gets or sets the SQL to be executed to perform this migration operation. + + + + + Gets or sets a value indicating whether this statement should be performed outside of + the transaction scope that is used to make the migration process transactional. + If set to true, this operation will not be rolled back if the migration process fails. + + + + + Represents dropping a primary key from a table. + + + + + Initializes a new instance of the DropPrimaryKeyOperation class. + The Table and Columns properties should also be populated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets an operation to add the primary key. + + + + + Represents a foreign key constraint being added to a table. + + + + + Initializes a new instance of the AddForeignKeyOperation class. + The PrincipalTable, PrincipalColumns, DependentTable and DependentColumns properties should also be populated. + + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets an operation to create an index on the foreign key column(s). + + An operation to add the index. + + + + The names of the column(s) that the foreign key constraint should target. + + + + + Gets or sets a value indicating if cascade delete should be configured on the foreign key constraint. + + + + + Gets an operation to drop the foreign key constraint. + + + + + + + + This class provide service for both the singularization and pluralization, it takes the word pairs + in the ctor following the rules that the first one is singular and the second one is plural. + + + + + Convention to discover foreign key properties whose names are a combination + of the principal type name and the principal type primary key property name(s). + + + + + Convention to set a default maximum length of 128 for properties whose type supports length facets. + + + + + Convention to ensure an invalid/unsupported mapping is not created when mapping inherited properties + + + + + Convention to process instances of found on properties in the model. + + + + + Used to configure a property of an entity type or complex type. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the property to allow the maximum length supported by the database provider. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to have the specified maximum length. + + + The maximum length for the property. + Setting 'null' will remove any maximum length restriction from the property and a default length will be used for the database column.. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be fixed length. + Use HasMaxLength to set the length that the property is fixed to. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be variable length. + properties are variable length by default. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be optional. + The database column used to store this property will be nullable. + properties are optional by default. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be required. + The database column used to store this property will be non-nullable. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures how values for the property are generated by the database. + + + The pattern used to generate values for the property in the database. + Setting 'null' will remove the database generated pattern facet from the property. + Setting 'null' will cause the same runtime behavior as specifying 'None'. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to be used as an optimistic concurrency token. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the property is to be used as an optimistic concurrency token. + + + Value indicating if the property is a concurrency token or not. + Specifying 'null' will remove the concurrency token facet from the property. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the database column used to store the property. + + The name of the column. + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the data type of the database column used to store the property. + + Name of the database provider specific data type. + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the order of the database column used to store the property. + This method is also used to specify key ordering when an entity type has a composite key. + + The order that this column should appear in the database table. + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the property to support Unicode string content. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures whether or not the property supports Unicode string content. + + + Value indicating if the property supports Unicode string content or not. + Specifying 'null' will remove the Unicode facet from the property. + Specifying 'null' will cause the same runtime behavior as specifying 'false'. + + The same StringPropertyConfiguration instance so that multiple calls can be chained. + + + + Configures the table and column mapping of a many:many relationship. + This configuration functionality is available via the Code First Fluent API, see . + + + + + Configures the join table name for the relationship. + + Name of the table. + The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Configures the join table name and schema for the relationship. + + Name of the table. + Schema of the table. + The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the column(s) for the left foreign key. + The left foreign key represents the navigation property specified in the HasMany call. + + + The foreign key column names. + When using multiple foreign key properties, the properties must be specified in the same order that the + the primary key properties were configured for the target entity type. + + The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Configures the name of the column(s) for the right foreign key. + The right foreign key represents the navigation property specified in the WithMany call. + + + The foreign key column names. + When using multiple foreign key properties, the properties must be specified in the same order that the + the primary key properties were configured for the target entity type. + + The same ManyToManyAssociationMappingConfiguration instance so that multiple calls can be chained. + + + + Validates a property of a given EDM complex type. + + + This is a composite validator for a complex property of an entity. + + + + + Validates a property of a given EDM property type. + + + This is a composite validator for a property of an entity or a complex type. + + + + + Simple validators for the corresponding property. + + + + + Name of the property the validator was created for. + + + + + Creates an instance of for a given EDM property. + + The EDM property name. + Validators used to validate the given property. + + + + Validates a property. + + Validation context. Never null. + Property to validate. Never null. + Validation errors as . Empty if no errors. Never null. + + + + + Simple validators for the corresponding property. + + + + + Gets the name of the property the validator was created for. + + + + + The complex type validator. + + + + + Creates an instance of for a given complex property. + + The complex property name. + Validators used to validate the given property. + Complex type validator. + + + + Validates a complex property. + + Validation context. Never null. + Property to validate. Never null. + Validation errors as . Empty if no errors. Never null. + + + + + Extends to create a sortable binding list that stays in + sync with an underlying . That is, when items are added + or removed from the binding list, they are added or removed from the ObservableCollecion, and + vice-versa. + + The list element type. + + + + Initializes a new instance of a binding list backed by the given + + The obervable collection. + + + + Creates a new item to be added to the binding list. + + The new item. + + + + Cancels adding of a new item that was started with AddNew. + + Index of the item. + + + + Removes all items from the binding list and underlying ObservableCollection. + + + + + Ends the process of adding a new item that was started with AddNew. + + Index of the item. + + + + Inserts the item into the binding list at the given index. + + The index. + The item. + + + + Removes the item at the specified index. + + The index. + + + + Sets the item into the list at the given position. + + The index to insert at. + The item. + + + + Event handler to update the binding list when the underlying observable collection changes. + + The sender. + Data indicating how the collection has changed. + + + + Adds the item to the underlying observable collection. + + The item. + + + + Removes the item from the underlying from observable collection. + + The item. + + + + Helper class that extends Tuple to give the Item1 and Item2 properties more meaningful names. + + + + + Creates a new pair of the given set of entity types and DbSet initializer delegate. + + + + + The entity types part of the pair. + + + + + The DbSet properties initializer part of the pair. + + + + + This convention uses the namespace of the derived + class as the namespace of the conceptual model built by + Code First. + + + + + Initializes a new instance of the class. + + The model namespace. + + + + Applies the convention to the given model. + + The model. + + + + A non-generic version of the class. + + + + + Creates a from information in the given . + Use this method in preference to the constructor since it may potentially create a subclass depending on + the type of member represented by the InternalCollectionEntry instance. + + The internal reference entry. + The new entry. + + + + Initializes a new instance of the class. + + The internal entry. + + + + Loads the entity from the database. + Note that if the entity already exists in the context, then it will not overwritten with values from the database. + + + + + Returns the query that would be used to load this entity from the database. + The returned query can be modified using LINQ to perform filtering or operations in the database. + + A query for the entity. + + + + Returns the equivalent generic object. + + The type of entity on which the member is declared. + The type of the property. + The equivalent generic object. + + + + Gets the property name. + + The property name. + + + + Gets or sets the current value of the navigation property. The current value is + the entity that the navigation property references. + + The current value. + + + + Gets a value indicating whether the entity has been loaded from the database. + + true if the entity is loaded; otherwise, false. + + + + The to which this navigation property belongs. + + An entry for the entity that owns this navigation property. + + + + Gets the backing this object as an . + + The internal member entry. + + + + A collection of all the properties for an underlying entity or complex object. + + + An instance of this class can be converted to an instance of the generic class + using the Cast method. + Complex properties in the underlying entity or complex object are represented in + the property values as nested instances of this class. + + + + + Initializes a new instance of the class. + + The internal dictionary. + + + + Creates an object of the underlying type for this dictionary and hydrates it with property + values from this dictionary. + + The properties of this dictionary copied into a new object. + + + + Sets the values of this dictionary by reading values out of the given object. + The given object can be of any type. Any property on the object with a name that + matches a property name in the dictionary and can be read will be read. Other + properties will be ignored. This allows, for example, copying of properties from + simple Data Transfer Objects (DTOs). + + The object to read values from. + + + + Creates a new dictionary containing copies of all the properties in this dictionary. + Changes made to the new dictionary will not be reflected in this dictionary and vice versa. + + A clone of this dictionary. + + + + Sets the values of this dictionary by reading values from another dictionary. + The other dictionary must be based on the same type as this dictionary, or a type derived + from the type for this dictionary. + + The dictionary to read values from. + + + + Gets the value of the property just like using the indexed property getter but + typed to the type of the generic parameter. This is useful especially with + nested dictionaries to avoid writing expressions with lots of casts. + + The type of the property. + Name of the property. + The value of the property. + + + + Gets the set of names of all properties in this dictionary as a read-only set. + + The property names. + + + + Gets or sets the value of the property with the specified property name. + The value may be a nested instance of this class. + + The property name. + The value of the property. + + + + Gets the internal dictionary. + + The internal dictionary. + + + + Describes the origin of the database connection string associated with a . + + + + + The connection string was created by convention. + + + + + The connection string was read from external configuration. + + + + + The connection string was explicitly specified at runtime. + + + + + The connection string was overriden by connection information supplied to DbContextInfo. + + + + + A value from this enumeration can be provided directly to the + class or can be used in the applied to + a class derived from . The value used defines which version of + the DbContext and DbModelBuilder conventions should be used when building a model from + code--also know as "Code First". + + + Using DbModelBuilderVersion.Latest ensures that all the latest functionality is available + when upgrading to a new release of the Entity Framework. However, it may result in an + application behaving differently with the new release than it did with a previous release. + This can be avoided by using a specific version of the conventions, but if a version + other than the latest is set then not all the latest functionality will be available. + + + + + Indicates that the latest version of the and + conventions should be used. + + + + + Indicates that the version of the and + conventions shipped with Entity Framework v4.1 + should be used. + + + + + Represents one of the fixed set of Entity Data Model (EDM) primitive types. + + + + + Retrieves the EdmPrimitiveType instance with the corresponding to the specified value, if any. + + The name of the primitive type instance to retrieve + The EdmPrimitiveType with the specified name, if successful; otherwise null . + true if the given name corresponds to an EDM primitive type name; otherwise false . + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets the EdmPrimitiveType instance that represents the primitive type. + + + + + Gets an value that indicates which Entity Data Model (EDM) primitive type this type represents. + + + + + Allows the construction and modification of the mapping of an EDM entity set ( ) to a database ( ). + + + + + Gets or sets an value representing the entity set that is being mapped. + + + + + Gets or sets the collection of s that specifies how the set's entity types are mapped to the database. + + + + + Allows the construction and modification of the mapping of an EDM entity container ( ) to a database ( ). + + + + + Gets or sets an value representing the entity container that is being mapped. + + + + + Gets or sets the collection of s that specifies how the container's entity sets are mapped to the database. + + + + + Gets the collection of s that specifies how the container's association sets are mapped to the database. + + + + + Represents the mapping of an entity property to a column in a database table. + + + + + Gets or sets the collection of instances that defines the mapped property, beginning from a property declared by the mapped entity type and optionally proceeding through properties of complex property result types. + + + + + Gets or sets a value representing the table column to which the entity property is being mapped. + + + + + + + + + Gets an optional value indicating which property of the source item caused the event to be raised. + + + + + Gets a value that identifies the specific error that is being raised. + + + + + Gets an optional descriptive message the describes the error that is being raised. + + + + + The pattern used to generate values for a property in the database. + + + + + The database does not generate values. + + + + + The database generates a value when a row is inserted. + + + + + The database generates a value when a row is inserted or updated. + + + + + Represents inserting a new record into the migrations history table. + The migrations history table is used to store a log of the migrations that have been applied to the database. + + + + + Initializes a new instance of the InsertHistoryOperation class. + + Name of the migrations history table. + Id of the migration record to be inserted. + Value to be stored in the model column. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the value to store in the history table indicating when this entry was created. + + + + + Gets the value to store in the history table representing the target model of the migration. + + + + + Gets the value to store in the history table indicating the version of Entity Framework used to produce this migration. + + + + + + + + An implementation of that will use Code First Migrations + to update the database to the latest version. + + + + + Initializes a new instance of the MigrateDatabaseToLatestVersion class. + + + + + Initializes a new instance of the MigrateDatabaseToLatestVersion class that will + use a specific connection string from the configuration file to connect to + the database to perform the migration. + + The name of the connection string to use for migration. + + + + + + + Used to cache and retrieve generated validators and to create context for validating entities or properties. + + + + + Collection of validators keyed by the entity CLR type. Note that if there's no validation for a given type + it will be associated with a null validator. + + + + + Initializes a new instance of class. + + + + + Returns a validator to validate . + + Entity the validator is requested for. + + to validate . Possibly null if no validation + has been specified for the entity. + + + + + Returns a validator to validate . + + Navigation property the validator is requested for. + + Validator to validate . Possibly null if no validation + has been specified for the requested property. + + + + + Gets a validator for the . + + Entity validator. + Property to get a validator for. + + Validator to validate . Possibly null if there is no validation for the + . + + + For complex properties this method walks up the type hierarchy to get to the entity level and then goes down + and gets a validator for the child property that is an ancestor of the property to validate. If a validator + returned for an ancestor is null it means that there is no validation defined beneath and the method just + propagates (and eventually returns) null. + + + + + Creates for . + + Entity entry for which a validation context needs to be created. + User defined dictionary containing additional info for custom validation. This parameter is optional and can be null. + An instance of class. + + + + + Adapted from to allow the initializer to take an input object and + to do one-time initialization that only has side-effects and doesn't return a value. + + The type of the input. + + + + Initializes a new instance of the class. + + The action. + + + + Performs the action unless it has already been successfully performed before. + + The input to the action; ignored if the action has already succeeded. + + + + An instance of this internal class is created whenever an instance of the public + class is needed. This allows the public surface to be non-generic, while the runtime type created + still implements . + + The type of the entity. + + + + Creates a new set that will be backed by the given internal set. + + The internal set. + + + + Creates an instance of this class. This method is used with CreateDelegate to cache a delegate + that can create a generic instance without calling MakeGenericType every time. + + + The internal set to wrap, or null if a new internal set should be created. + The set. + + + + See comments in . + + + + + See comments in . + + + + + See comments in . + + + + + See comments in . + + + + + See comments in . + + + + + Gets the enumeration of this query causing it to be executed against the store. + + An enumerator for the query + + + + Gets the underlying internal query object. + + The internal query. + + + + Gets the underlying internal set. + + The internal set. + + + + See comments in . + + + + + The types of member entries supported. + + + + + The internal class used to implement + and . + This internal class contains all the common implementation between the generic and non-generic + entry classes and also allows for a clean internal factoring without compromising the public API. + + + + + Initializes a new instance of the class. + + The internal context. + The state entry. + + + + Initializes a new instance of the class for an + entity which may or may not be attached to the context. + + The internal context. + The entity. + + + + Queries the database for copies of the values of the tracked entity as they currently exist in the database. + + The store values. + + + + Appends a query for the properties in the entity to the given string builder that is being used to + build the eSQL query. This method may be called recursively to query for all the sub-properties of + a complex property. + + The query builder. + The qualifier with which to prefix each property name. + The dictionary that acts as a template for the properties to query. + + + + Validates that a dictionary can be obtained for the state of the entity represented by this entry. + + The method name being used to request a dictionary. + The state that is invalid for the request being processed. + + + + Calls Refresh with StoreWins on the underlying state entry. + + + + + Gets an internal object representing a reference navigation property. + This method is virtual to allow mocking. + + The navigation property. + The type of entity requested, which may be 'object' or null if any type can be accepted. + The entry. + + + + Gets an internal object representing a collection navigation property. + This method is virtual to allow mocking. + + The navigation property. + The type of entity requested, which may be 'object' or null f any type can be accepted. + The entry. + + + + Gets an internal object representing a navigation, scalar, or complex property. + This method is virtual to allow mocking. + + Name of the property. + The type of entity requested, which may be 'object' if any type can be accepted. + The entry. + + + + Gets an internal object representing a scalar or complex property. + This method is virtual to allow mocking. + + The property. + The type of object requested, which may be null or 'object' if any type can be accepted. + if set to true then the found property must be a complex property. + The entry. + + + + Gets an internal object representing a scalar or complex property. + The property may be a nested property on the given . + + The parent property entry, or null if this is a property directly on the entity. + Name of the property. + The type of object requested, which may be null or 'object' if any type can be accepted. + if set to true then the found property must be a complex property. + The entry. + + + + Gets an internal object representing a scalar or complex property. + The property may be a nested property on the given . + + The parent property entry, or null if this is a property directly on the entity. + Name of the property. + The property split out into its parts. + The type of object requested, which may be null or 'object' if any type can be accepted. + if set to true then the found property must be a complex property. + The entry. + + + + Checks that the given property name is a navigation property and is either a reference property or + collection property according to the value of requireCollection. + + + + + Gets metadata for the given property if that property is a navigation property or returns null + if it is not a navigation property. + + Name of the property. + Navigation property metadata or null. + + + + Gets the type of entity or entities at the target end of the given navigation property. + + The navigation property. + The CLR type of the entity or entities at the other end. + + + + Gets the related end for the navigation property with the given name. + + The navigation property. + + + + + Uses EDM metadata to validate that the property name exists in the model and represents a scalar or + complex property or exists in the CLR type. + This method is public and virtual so that it can be mocked. + + The property name. + The type on which the property is declared. + The type of object requested, which may be 'object' if any type can be accepted. + Metadata for the property. + + + + Splits the given property name into parts delimited by dots. + + Name of the property. + The parts of the name. + + + + Validates that this entry is associated with an underlying and + is not just wrapping a non-attached entity. + + + + + Validates entity represented by this entity entry. + This method is virtual to allow mocking. + + User defined dictionary containing additional info for custom validation. This parameter is optional and can be null. + containing validation result. Never null. + + + + Determines whether the specified is equal to this instance. + Two instances are considered equal if they are both entries for + the same entity on the same . + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + Two instances are considered equal if they are both entries for + the same entity on the same . + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Gets the tracked entity. + This property is virtual to allow mocking. + + The entity. + + + + Gets or sets the state of the entity. + + The state. + + + + Gets the current property values for the tracked entity represented by this object. + This property is virtual to allow mocking. + + The current values. + + + + Gets the original property values for the tracked entity represented by this object. + The original values are usually the entity's property values as they were when last queried from + the database. + This property is virtual to allow mocking. + + The original values. + + + + Checks whether or not this entry is associated with an underlying or + is just wrapping a non-attached entity. + + + + + Gets the type of the entity being tracked. + + The type of the entity. + + + + Gets the c-space entity type for this entity from the EDM. + + + + + Gets the underlying object state entry. + + + + + Gets the internal context. + + The internal context. + + + + Thrown when a context is generated from the templates in Database First or Model + First mode and is then used in Code First mode. + + + Code generated using the T4 templates provided for Database First and Model First use may not work + correctly if used in Code First mode. To use these classes with Code First please add any additional + configuration using attributes or the DbModelBuilder API and then remove the code that throws this + exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The object that holds the serialized object data. + The contextual information about the source or destination. + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Exception thrown by when it was expected that SaveChanges for an entity would + result in a database update but in fact no rows in the database were affected. This usually indicates + that the database has been concurrently updated such that a concurrency token that was expected to match + did not actually match. + Note that state entries referenced by this exception are not serialized due to security and accesses to + the state entries after serialization will return null. + + + + + Initializes a new instance of the class. + + The context. + The inner exception. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + The message. + + + + Initializes a new instance of the class. + + The message. + The inner exception. + + + + Represents a SQL query for entities that is created from a + and is executed using the connection from that context. + Instances of this class are obtained from the instance for the + entity type. The query is not executed when this object is created; it is executed + each time it is enumerated, for example by using foreach. + SQL queries for non-entities are created using the . + See for a generic version of this class. + + + + + Initializes a new instance of the class. + + The internal query. + + + + Executes the query and returns an enumerator for the elements. + + + An object that can be used to iterate through the elements. + + + + + Returns a new query where the results of the query will not be tracked by the associated + . + + A new query with no-tracking applied. + + + + Returns a that contains the SQL string that was set + when the query was created. The parameters are not included. + + + A that represents this instance. + + + + + Throws an exception indicating that binding directly to a store query is not supported. + + + Never returns; always throws. + + + + + Gets the internal query. + + The internal query. + + + + Returns false. + + false. + + + + An implementation of IDatabaseInitializer that will always recreate and optionally re-seed the + database the first time that a context is used in the app domain. + To seed the database, create a derived class and override the Seed method. + + The type of the context. + + + + Executes the strategy to initialize the database for the given context. + + The context. + + + + A that should be overridden to actually add data to the context for seeding. + The default implementation does nothing. + + The context to seed. + + + + DbModelBuilder is used to map CLR classes to a database schema. + This code centric approach to building an Entity Data Model (EDM) model is known as 'Code First'. + + + DbModelBuilder is typically used to configure a model by overriding . + You can also use DbModelBuilder independently of DbContext to build a model and then construct a + or . + The recommended approach, however, is to use OnModelCreating in as + the workflow is more intuitive and takes care of common tasks, such as caching the created model. + + Types that form your model are registered with DbModelBuilder and optional configuration can be + performed by applying data annotations to your classes and/or using the fluent style DbModelBuilder + API. + + When the Build method is called a set of conventions are run to discover the initial model. + These conventions will automatically discover aspects of the model, such as primary keys, and + will also process any data annotations that were specified on your classes. Finally + any configuration that was performed using the DbModelBuilder API is applied. + + Configuration done via the DbModelBuilder API takes precedence over data annotations which + in turn take precedence over the default conventions. + + + + + Initializes a new instance of the class. + + The process of discovering the initial model will use the set of conventions included + in the most recent version of the Entity Framework installed on your machine. + + + Upgrading to newer versions of the Entity Framework may cause breaking changes + in your application because new conventions may cause the initial model to be + configured differently. There is an alternate constructor that allows a specific + version of conventions to be specified. + + + + + Initializes a new instance of the class that will use + a specific set of conventions to discover the initial model. + + The version of conventions to be used. + + + + Excludes a type from the model. This is used to remove types from the model that were added + by convention during initial model discovery. + + The type to be excluded. + The same DbModelBuilder instance so that multiple calls can be chained. + + + + Excludes a type(s) from the model. This is used to remove types from the model that were added + by convention during initial model discovery. + + The types to be excluded from the model. + The same DbModelBuilder instance so that multiple calls can be chained. + + + + Registers an entity type as part of the model and returns an object that can be used to + configure the entity. This method can be called multiple times for the same entity to + perform multiple lines of configuration. + + The type to be registered or configured. + The configuration object for the specified entity type. + + + + Registers a type as an entity in the model and returns an object that can be used to + configure the entity. This method can be called multiple times for the same type to + perform multiple lines of configuration. + + The type to be registered or configured. + The configuration object for the specified entity type. + + + + Registers a type as a complex type in the model and returns an object that can be used to + configure the complex type. This method can be called multiple times for the same type to + perform multiple lines of configuration. + + The type to be registered or configured. + The configuration object for the specified complex type. + + + + Creates a based on the configuration performed using this builder. + The connection is used to determine the database provider being used as this + affects the database layer of the generated model. + + Connection to use to determine provider information. + The model that was built. + + + + Creates a based on the configuration performed using this builder. + Provider information must be specified because this affects the database layer of the generated model. + For SqlClient the invariant name is 'System.Data.SqlClient' and the manifest token is the version year (i.e. '2005', '2008' etc.) + + The database provider that the model will be used with. + The model that was built. + + + + Provides access to the settings of this DbModelBuilder that deal with conventions. + + + + + Gets the for this DbModelBuilder. + The registrar allows derived entity and complex type configurations to be registered with this builder. + + + + + author/email + + + + + author/name + + + + + author/uri + + + + + published + + + + + rights + + + + + summary + + + + + title + + + + + contributor/email + + + + + contributor/name + + + + + contributor/uri + + + + + category/@label + + + + + Plaintext + + + + + HTML + + + + + XHTML + + + + + updated + + + + + link/@href + + + + + link/@rel + + + + + link/@type + + + + + link/@hreflang + + + + + link/@title + + + + + link/@length + + + + + category/@term + + + + + category/@scheme + + + + + Allows the construction and modification of a primitive- or complex-valued property of an Entity Data Model (EDM) entity or complex type. + + + + + Gets or sets an value that indicates which collection semantics - if any - apply to the property. + + + + + Gets or sets a value that indicates whether the property is used for concurrency validation. + + + + + Gets or sets on optional value that indicates an initial default value for the property. + + + + + Gets or sets an that specifies the result type of the property. + + + + + Indicates which EDM-to-Database Mapping concept is represented by a given item. + + + + + Database Mapping Kind + + + + + Entity Container Mapping Kind + + + + + Entity Set Mapping Kind + + + + + Association Set Mapping Kind + + + + + Entity Type Mapping Kind + + + + + Query View Mapping Kind + + + + + Entity Type Mapping Fragment Kind + + + + + Edm Property Mapping Kind + + + + + Association End Mapping Kind + + + + + Column Condition Kind + + + + + Property Condition Kind + + + + + Allows the construction and modification of a complete or partial mapping of an EDM entity type ( ) or type hierarchy to a specific database table ( ). + + + + + Gets or sets an value representing the entity type or hierarchy that is being mapped. + + + + + Gets or sets a value indicating whether this type mapping applies to and all its direct or indirect subtypes ( true ), or only to ( false ). + + + + + Allows the construction and modification of additional constraints that can be applied to a specific use of a primitive type in a Database Metadata item. + + + + + Returns true if any facet value property currently has a non-null value; otherwise returns false . + + + + + Gets or sets an optional value indicating whether the referenced type should be considered to have a fixed or variable length. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered to have its intrinsic maximum length, rather than a specific value. + + + + + Gets or sets an optional value indicating whether the referenced type should be considered to be Unicode or non-Unicode. + + + + + Gets or sets an optional value indicating the current constraint on the type's maximum length. + + + + + Gets or sets an optional value indicating the current constraint on the type's precision. + + + + + Gets or sets an optional value indicating the current constraint on the type's scale. + + + + + A simple representation of an app.config or web.config file. + + + + + Initializes a new instance of AppConfig based on supplied configuration + + Configuration to load settings from + + + + Initializes a new instance of AppConfig based on supplied connection strings + The default configuration for database initializers and default connection factory will be used + + Connection strings to be used + + + + Initializes a new instance of AppConfig based on the for the AppDomain + + + Use AppConfig.DefaultInstance instead of this constructor + + + + + Appies any database intializers specified in the configuration + + + + + Appies any database intializers specified in the configuration + + + Value indicating if initializers should be re-applied if they have already been applied in this AppDomain + + + + + Gets the specified connection string from the configuration + + Name of the connection string to get + The connection string, or null if there is no connection string with the specified name + + + + Gets the default connection factory based on the configuration + + + + + Gets a singleton instance of configuration based on the for the AppDomain + + + + + Represents validation results for single entity. + + + + + Entity entry the results applies to. Never null. + + + + + List of instances. Never null. Can be empty meaning the entity is valid. + + + + + Creates an instance of class. + + + Entity entry the results applies to. Never null. + + + List of instances. Never null. Can be empty meaning the entity is valid. + + + + + Creates an instance of class. + + + Entity entry the results applies to. Never null. + + + List of instances. Never null. Can be empty meaning the entity is valid. + + + + + Gets an instance of the results applies to. + + + + + Gets validation errors. Never null. + + + + + Gets an indicator if the entity is valid. + + + + + Convention to process instances of found on foreign key properties in the model. + + + + + Represents a raw SQL query against the context for any type where the results are never + associated with an entity set and are never tracked. + + + + + Initializes a new instance of the class. + + The internal context. + Type of the element. + The SQL. + The parameters. + + + + Returns this query since it can never be a tracking query. + + This instance. + + + + Executes the query and returns an enumerator for the results. + + The query results. + + + + Encapsulates information read from the application config file that specifies a database initializer + and allows that initializer to be dynamically applied. + + + + + Initializes a new instance of the class. + + The key from the entry in the config file. + The value from the enrty in the config file. + + + + Uses the context type and initializer type specified in the config to create an initializer instance + and set it with the DbDbatabase.SetInitializer method. + + + + + Reads all initializers from the application config file and sets them using the Database class. + + + + + Allows the construction and modification of a foreign key constraint sourced by a instance. + + + + + Gets or sets the to take when a delete operation is attempted. + + + + + The same as but works in partial trust. + + + + + Specifies the default tab string. This field is constant. + + + + + Initializes a new instance of the IndentedTextWriter class using the specified text writer and default tab string. + + The to use for output. + + + + Initializes a new instance of the IndentedTextWriter class using the specified text writer and tab string. + + The to use for output. The tab string to use for indentation. + + + + Closes the document being written to. + + + + + Flushes the stream. + + + + + Outputs the tab string once for each level of indentation according to the property. + + + + + Writes the specified string to the text stream. + + The string to write. + + + + Writes the text representation of a Boolean value to the text stream. + + The Boolean value to write. + + + + Writes a character to the text stream. + + The character to write. + + + + Writes a character array to the text stream. + + The character array to write. + + + + Writes a subarray of characters to the text stream. + + The character array to write data from. Starting index in the buffer. The number of characters to write. + + + + Writes the text representation of a Double to the text stream. + + The double to write. + + + + Writes the text representation of a Single to the text stream. + + The single to write. + + + + Writes the text representation of an integer to the text stream. + + The integer to write. + + + + Writes the text representation of an 8-byte integer to the text stream. + + The 8-byte integer to write. + + + + Writes the text representation of an object to the text stream. + + The object to write. + + + + Writes out a formatted string, using the same semantics as specified. + + The formatting string. The object to write into the formatted string. + + + + Writes out a formatted string, using the same semantics as specified. + + The formatting string to use. The first object to write into the formatted string. The second object to write into the formatted string. + + + + Writes out a formatted string, using the same semantics as specified. + + The formatting string to use. The argument array to output. + + + + Writes the specified string to a line without tabs. + + The string to write. + + + + Writes the specified string, followed by a line terminator, to the text stream. + + The string to write. + + + + Writes a line terminator. + + + + + Writes the text representation of a Boolean, followed by a line terminator, to the text stream. + + The Boolean to write. + + + + Writes a character, followed by a line terminator, to the text stream. + + The character to write. + + + + Writes a character array, followed by a line terminator, to the text stream. + + The character array to write. + + + + Writes a subarray of characters, followed by a line terminator, to the text stream. + + The character array to write data from. Starting index in the buffer. The number of characters to write. + + + + Writes the text representation of a Double, followed by a line terminator, to the text stream. + + The double to write. + + + + Writes the text representation of a Single, followed by a line terminator, to the text stream. + + The single to write. + + + + Writes the text representation of an integer, followed by a line terminator, to the text stream. + + The integer to write. + + + + Writes the text representation of an 8-byte integer, followed by a line terminator, to the text stream. + + The 8-byte integer to write. + + + + Writes the text representation of an object, followed by a line terminator, to the text stream. + + The object to write. + + + + Writes out a formatted string, followed by a line terminator, using the same semantics as specified. + + The formatting string. The object to write into the formatted string. + + + + Writes out a formatted string, followed by a line terminator, using the same semantics as specified. + + The formatting string to use. The first object to write into the formatted string. The second object to write into the formatted string. + + + + Writes out a formatted string, followed by a line terminator, using the same semantics as specified. + + The formatting string to use. The argument array to output. + + + + Writes the text representation of a UInt32, followed by a line terminator, to the text stream. + + A UInt32 to output. + + + + Gets the encoding for the text writer to use. + + + An that indicates the encoding for the text writer to use. + + + + + Gets or sets the new line character to use. + + + The new line character to use. + + + + + Gets or sets the number of spaces to indent. + + + The number of spaces to indent. + + + + + Gets the to use. + + + The to use. + + + + + Represents altering an existing column. + + + + + Initializes a new instance of the AlterColumnOperation class. + + The name of the table that the column belongs to. + Details of what the column should be altered to. + Value indicating if this change will result in data loss. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Initializes a new instance of the AlterColumnOperation class. + + The name of the table that the column belongs to. + Details of what the column should be altered to. + Value indicating if this change will result in data loss. + An operation to revert this alteration of the column. + + Additional arguments that may be processed by providers. + Use anonymous type syntax to specify arguments e.g. 'new { SampleArgument = "MyValue" }'. + + + + + Gets the name of the table that the column belongs to. + + + + + Gets the new definition for the column. + + + + + Gets an operation that represents reverting the alteration. + The inverse cannot be automatically calculated, + if it was not supplied to the constructor this property will return null. + + + + + + + + Calculates the model hash values used the EdmMetadata table from EF 4.1/4.2. + + + + + Calculates an SHA256 hash of the EDMX from the given code first model. This is the hash stored in + the database in the EdmMetadata table in EF 4.1/4.2. The hash is always calculated using a v2 schema + as was generated by EF 4.1/4.2 and with the entity included in the model. + + + + diff --git a/packages/EntityFramework.4.3.1/tools/EF4.3on.NET4.5Readme.txt b/packages/EntityFramework.4.3.1/tools/EF4.3on.NET4.5Readme.txt new file mode 100644 index 0000000..b25c607 --- /dev/null +++ b/packages/EntityFramework.4.3.1/tools/EF4.3on.NET4.5Readme.txt @@ -0,0 +1,52 @@ +----------------------------------------------------------------------------------------- + Entity Framework 5 Recommended for .NET Framework 4.5 Projects +----------------------------------------------------------------------------------------- + + +You have installed EF 4.3 in a project that targets .NET Framework 4.5. + +There are some known issues using EF 4.x in a .NET 4.5 project. + + +We recommend installing a pre-release version of EF 5, which is designed to work with .NET 4.5 + +1) Open package manager console + Tools -> Library Package Manager -> Package Manager Console + +2) Use the following command to install the latest pre-release package + Install-Package EntityFramework -IncludePreRelease + + + +----------------------------------------------------------------------------------------- + Known Issues with Entity Framework 4.x and .NET Framework 4.5 +----------------------------------------------------------------------------------------- + +Entity Framework 4.1 thru 4.3 included additional data annotations in the +System.ComponentModel.DataAnnotations namespace in the EntityFramework assembly. +In .NET 4.5 these annotations were moved to be part of the .NET Framework in the +System.ComponentModel.DataAnnotations.Schema namespace of the +System.ComponentModel.DataAnnotations.dll assembly. If you are using EF 4.x and targeting +.NET 4.5 this results in two data annotations with the same name in different assemblies. +Because the annotations in the .NET Framework are in a different namespace we were not +able to use type forwarding to avoid this conflict. + +It is possible to use EF 4.x on .NET 4.5 but we recommend using the latest pre-release +version of EF 5. If you are not using the affected data annotations there is no impact +on your code. If you are using the data annotations in a C# project you can use the extern +modifier to ensure your code uses the annotations from EntityFramework.dll +(http://msdn.microsoft.com/en-us/library/e59b22c5(v=VS.80).aspx). If you use the new +annotations from the System.ComponentModel.DataAnnotations.dll assembly in .NET 4.5 +they will not be processed by Code First. + +The affected annotations are: +- Column +- ComplexType +- DatabaseGenerated +- DatabaseGeneratedOption +- ForeignKey +- InverseProperty +- MaxLength +- MinLength +- NotMapped +- Table diff --git a/packages/EntityFramework.4.3.1/tools/EntityFramework.PowerShell.dll b/packages/EntityFramework.4.3.1/tools/EntityFramework.PowerShell.dll new file mode 100644 index 0000000..c22fec4 Binary files /dev/null and b/packages/EntityFramework.4.3.1/tools/EntityFramework.PowerShell.dll differ diff --git a/packages/EntityFramework.4.3.1/tools/EntityFramework.psd1 b/packages/EntityFramework.4.3.1/tools/EntityFramework.psd1 new file mode 100644 index 0000000..073cdb7 Binary files /dev/null and b/packages/EntityFramework.4.3.1/tools/EntityFramework.psd1 differ diff --git a/packages/EntityFramework.4.3.1/tools/EntityFramework.psm1 b/packages/EntityFramework.4.3.1/tools/EntityFramework.psm1 new file mode 100644 index 0000000..662d21d --- /dev/null +++ b/packages/EntityFramework.4.3.1/tools/EntityFramework.psm1 @@ -0,0 +1,493 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. + +$InitialDatabase = '0' + +$installPath = $args[0] +$knownExceptions = @( + 'System.Data.Entity.Migrations.Infrastructure.MigrationsException', + 'System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException', + 'System.Data.Entity.Migrations.Infrastructure.AutomaticDataLossException' +) + +<# +.SYNOPSIS + Enables Code First Migrations in a project. + +.DESCRIPTION + Enables Migrations by scaffolding a migrations configuration class in the project. If the + target database was created by an initializer, an initial migration will be created (unless + automatic migrations are enabled via the EnableAutomaticMigrations parameter). + +.PARAMETER EnableAutomaticMigrations + Specifies whether automatic migrations will be enabled in the scaffolded migrations configuration. + If ommitted, automatic migrations will be disabled. + +.PARAMETER ProjectName + Specifies the project that the scaffolded migrations configuration class will + be added to. If omitted, the default project selected in package manager + console is used. + +.PARAMETER Force + Specifies that the migrations configuration be overwritten when running more + than once for a given project. +#> +function Enable-Migrations +{ + [CmdletBinding(DefaultParameterSetName = 'ProjectName')] + param ( + [alias("Auto")] + [switch] $EnableAutomaticMigrations, + [string] $ProjectName, + [switch] $Force + ) + + try + { + $commands = New-MigrationsCommandsNoConfiguration $ProjectName + $commands.EnableMigrations($EnableAutomaticMigrations, $Force) + } + catch [Exception] + { + $exception = $_.Exception + $exceptionType = $exception.GetType() + + if ($exceptionType.FullName -eq 'System.Data.Entity.Migrations.Design.ToolingException') + { + if ($knownExceptions -notcontains $exception.InnerType) + { + Write-Host $exception.InnerStackTrace + } + } + elseif (!(Test-TypeInherits $exceptionType 'System.Data.Entity.Migrations.Infrastructure.MigrationsException')) + { + Write-Host $exception + } + + throw $exception.Message + } +} + +<# +.SYNOPSIS + Scaffolds a migration script for any pending model changes. + +.DESCRIPTION + Scaffolds a new migration script and adds it to the project. + +.PARAMETER Name + Specifies the name of the custom script. + +.PARAMETER Force + Specifies that the migration user code be overwritten when re-scaffolding an + existing migration. + +.PARAMETER ProjectName + Specifies the project that contains the migration configuration type to be + used. If ommitted, the default project selected in package manager console + is used. + +.PARAMETER StartUpProjectName + Specifies the configuration file to use for named connection strings. If + omitted, the specified project's configuration file is used. + +.PARAMETER ConfigurationTypeName + Specifies the migrations configuration to use. If omitted, migrations will + attempt to locate a single migrations configuration type in the target + project. + +.PARAMETER ConnectionStringName + Specifies the name of a connection string to use from the application's + configuration file. + +.PARAMETER ConnectionString + Specifies the the connection string to use. If omitted, the context's + default connection will be used. + +.PARAMETER ConnectionProviderName + Specifies the provider invariant name of the connection string. + +.PARAMETER IgnoreChanges + Scaffolds an empty migration ignoring any pending changes detected in the current model. + This can be used to create an initial, empty migration to enable Migrations for an existing + database. N.B. Doing this assumes that the target database schema is compatible with the + current model. + +#> +function Add-Migration +{ + [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] + param ( + [parameter(Position = 0, + Mandatory = $true)] + [string] $Name, + [switch] $Force, + [string] $ProjectName, + [string] $StartUpProjectName, + [string] $ConfigurationTypeName, + [parameter(ParameterSetName = 'ConnectionStringName')] + [string] $ConnectionStringName, + [parameter(ParameterSetName = 'ConnectionStringAndProviderName', + Mandatory = $true)] + [string] $ConnectionString, + [parameter(ParameterSetName = 'ConnectionStringAndProviderName', + Mandatory = $true)] + [string] $ConnectionProviderName, + [switch] $IgnoreChanges) + + try + { + $commands = New-MigrationsCommands $ProjectName $StartUpProjectName $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName + $commands.AddMigration($Name, $Force, $IgnoreChanges) + } + catch [Exception] + { + $exception = $_.Exception + $exceptionType = $exception.GetType() + + if ($exceptionType.FullName -eq 'System.Data.Entity.Migrations.Design.ToolingException') + { + if ($knownExceptions -notcontains $exception.InnerType) + { + Write-Host $exception.InnerStackTrace + } + } + elseif (!(Test-TypeInherits $exceptionType 'System.Data.Entity.Migrations.Infrastructure.MigrationsException')) + { + Write-Host $exception + } + + throw $exception.Message + } +} + +<# +.SYNOPSIS + Applies any pending migrations to the database. + +.DESCRIPTION + Updates the database to the current model by applying pending migrations. + +.PARAMETER SourceMigration + Only valid with -Script. Specifies the name of a particular migration to use + as the update's starting point. If ommitted, the last applied migration in + the database will be used. + +.PARAMETER TargetMigration + Specifies the name of a particular migration to update the database to. If + ommitted, the current model will be used. + +.PARAMETER Script + Generate a SQL script rather than executing the pending changes directly. + +.PARAMETER Force + Specifies that data loss is acceptable during automatic migration of the + database. + +.PARAMETER ProjectName + Specifies the project that contains the migration configuration type to be + used. If ommitted, the default project selected in package manager console + is used. + +.PARAMETER StartUpProjectName + Specifies the configuration file to use for named connection strings. If + omitted, the specified project's configuration file is used. + +.PARAMETER ConfigurationTypeName + Specifies the migrations configuration to use. If omitted, migrations will + attempt to locate a single migrations configuration type in the target + project. + +.PARAMETER ConnectionStringName + Specifies the name of a connection string to use from the application's + configuration file. + +.PARAMETER ConnectionString + Specifies the the connection string to use. If omitted, the context's + default connection will be used. + +.PARAMETER ConnectionProviderName + Specifies the provider invariant name of the connection string. +#> +function Update-Database +{ + [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] + param ( + [string] $SourceMigration, + [string] $TargetMigration, + [switch] $Script, + [switch] $Force, + [string] $ProjectName, + [string] $StartUpProjectName, + [string] $ConfigurationTypeName, + [parameter(ParameterSetName = 'ConnectionStringName')] + [string] $ConnectionStringName, + [parameter(ParameterSetName = 'ConnectionStringAndProviderName', + Mandatory = $true)] + [string] $ConnectionString, + [parameter(ParameterSetName = 'ConnectionStringAndProviderName', + Mandatory = $true)] + [string] $ConnectionProviderName) + + # TODO: If possible, convert this to a ParameterSet + if ($SourceMigration -and !$script) + { + throw '-SourceMigration can only be specified with -Script.' + } + + try + { + $commands = New-MigrationsCommands $ProjectName $StartUpProjectName $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName + $commands.UpdateDatabase($SourceMigration, $TargetMigration, $Script, $Force) + } + catch [Exception] + { + $exception = $_.Exception + $exceptionType = $exception.GetType() + + if ($exceptionType.FullName -eq 'System.Data.Entity.Migrations.Design.ToolingException') + { + if ($knownExceptions -notcontains $exception.InnerType) + { + Write-Host $exception.InnerStackTrace + } + } + elseif (!(Test-TypeInherits $exceptionType 'System.Data.Entity.Migrations.Infrastructure.MigrationsException')) + { + Write-Host $exception + } + + throw $exception.Message + } +} + +<# +.SYNOPSIS + Displays the migrations that have been applied to the target database. + +.DESCRIPTION + Displays the migrations that have been applied to the target database. + +.PARAMETER ProjectName + Specifies the project that contains the migration configuration type to be + used. If ommitted, the default project selected in package manager console + is used. + +.PARAMETER StartUpProjectName + Specifies the configuration file to use for named connection strings. If + omitted, the specified project's configuration file is used. + +.PARAMETER ConfigurationTypeName + Specifies the migrations configuration to use. If omitted, migrations will + attempt to locate a single migrations configuration type in the target + project. + +.PARAMETER ConnectionStringName + Specifies the name of a connection string to use from the application's + configuration file. + +.PARAMETER ConnectionString + Specifies the the connection string to use. If omitted, the context's + default connection will be used. + +.PARAMETER ConnectionProviderName + Specifies the provider invariant name of the connection string. +#> +function Get-Migrations +{ + [CmdletBinding(DefaultParameterSetName = 'ConnectionStringName')] + param ( + [string] $ProjectName, + [string] $StartUpProjectName, + [string] $ConfigurationTypeName, + [parameter(ParameterSetName = 'ConnectionStringName')] + [string] $ConnectionStringName, + [parameter(ParameterSetName = 'ConnectionStringAndProviderName', + Mandatory = $true)] + [string] $ConnectionString, + [parameter(ParameterSetName = 'ConnectionStringAndProviderName', + Mandatory = $true)] + [string] $ConnectionProviderName) + + try + { + $commands = New-MigrationsCommands $ProjectName $StartUpProjectName $ConfigurationTypeName $ConnectionStringName $ConnectionString $ConnectionProviderName + $commands.GetMigrations() + } + catch [Exception] + { + $exception = $_.Exception + $exceptionType = $exception.GetType() + + if ($exceptionType.FullName -eq 'System.Data.Entity.Migrations.Design.ToolingException') + { + if ($knownExceptions -notcontains $exception.InnerType) + { + Write-Host $exception.InnerStackTrace + } + } + elseif (!(Test-TypeInherits $exceptionType 'System.Data.Entity.Migrations.Infrastructure.MigrationsException')) + { + Write-Host $exception + } + + throw $exception.Message + } +} + +function New-MigrationsCommandsNoConfiguration($ProjectName) +{ + $project = Get-MigrationsProject $ProjectName + + Build-Project $project + + Load-EntityFramework + + try + { + return New-Object 'System.Data.Entity.Migrations.MigrationsCommands' @( + $project, + $project, + $null, + $null, + $null, + $null, + $PSCmdlet ) + } + catch [System.Management.Automation.MethodInvocationException] + { + throw $_.Exception.InnerException + } +} + +function New-MigrationsCommands($ProjectName, $StartUpProjectName, $ConfigurationTypeName, $ConnectionStringName, $ConnectionString, $ConnectionProviderName) +{ + $project = Get-MigrationsProject $ProjectName + $startUpProject = Get-MigrationsStartUpProject $StartUpProjectName + + Build-Project $project + Build-Project $startUpProject + + Load-EntityFramework + + try + { + return New-Object 'System.Data.Entity.Migrations.MigrationsCommands' @( + $project, + $startUpProject, + $ConfigurationTypeName, + $ConnectionStringName, + $ConnectionString, + $ConnectionProviderName, + $PSCmdlet ) + } + catch [System.Management.Automation.MethodInvocationException] + { + throw $_.Exception.InnerException + } +} + +function Get-MigrationsProject($name) +{ + if ($name) + { + return Get-SingleProject $name + } + + $project = Get-Project + + Write-Verbose ('Using NuGet project ''' + $project.Name + '''.') + + return $project +} + +function Get-MigrationsStartUpProject($name) +{ + if ($name) + { + return Get-SingleProject $name + } + + $startupProjectPaths = $DTE.Solution.SolutionBuild.StartupProjects + + if (!$startupProjectPaths) + { + throw 'No start-up project found. Please use the -StartupProject parameter.' + } + if ($startupProjectPaths.Length -gt 1) + { + throw 'More than one start-up project found. Please use the -StartUpProject parameter.' + } + + $startupProjectPath = $startupProjectPaths[0] + + if (!(Split-Path -IsAbsolute $startupProjectPath)) + { + $solutionPath = Split-Path $DTE.Solution.Properties.Item('Path').Value + $startupProjectPath = Join-Path $solutionPath $startupProjectPath -Resolve + } + + $startupProject = $DTE.Solution.Projects | ?{ + $fullName = $_.FullName + + if ($fullName -and $fullName.EndsWith('\')) + { + $fullName = $fullName.Substring(0, $fullName.Length - 1) + } + + return $fullName -eq $startupProjectPath + } + + Write-Verbose ('Using StartUp project ''' + $startupProject.Name + '''.') + + return $startupProject +} + +function Get-SingleProject($name) +{ + $project = Get-Project $name + + if ($project -is [array]) + { + throw "More than one project '$name' was found. Specify the full name of the one to use." + } + + return $project +} + +function Load-EntityFramework() +{ + [System.AppDomain]::CurrentDomain.SetShadowCopyFiles() + [System.Reflection.Assembly]::LoadFrom((Join-Path $installPath 'lib\net40\EntityFramework.dll')) | Out-Null + [System.Reflection.Assembly]::LoadFrom((Join-Path $installPath 'tools\EntityFramework.PowerShell.dll')) | Out-Null +} + +function Build-Project($project) +{ + $configuration = $DTE.Solution.SolutionBuild.ActiveConfiguration.Name + + $DTE.Solution.SolutionBuild.BuildProject($configuration, $project.UniqueName, $true) + + if ($DTE.Solution.SolutionBuild.LastBuildInfo) + { + throw 'The project ''' + $project.Name + ''' failed to build.' + } +} + +function Test-TypeInherits($type, $baseTypeName) +{ + if ($type.FullName -eq $baseTypeName) + { + return $true + } + + $baseType = $type.BaseType + + if ($baseType) + { + return Test-TypeInherits $baseType $baseTypeName + } + + return $false +} + +Export-ModuleMember @( 'Enable-Migrations', 'Add-Migration', 'Update-Database', 'Get-Migrations' ) -Variable 'InitialDatabase' diff --git a/packages/EntityFramework.4.3.1/tools/init.ps1 b/packages/EntityFramework.4.3.1/tools/init.ps1 new file mode 100644 index 0000000..26d2a33 --- /dev/null +++ b/packages/EntityFramework.4.3.1/tools/init.ps1 @@ -0,0 +1,13 @@ +param($installPath, $toolsPath, $package, $project) + +if ([System.AppDomain]::CurrentDomain.GetAssemblies() | ?{ $_.GetName().Name -eq 'EntityFramework' }) +{ + Write-Warning 'There is already a version of EntityFramework.dll loaded. You may need to restart Visual Studio for the commands to work properly.' +} + +if (Get-Module | ?{ $_.Name -eq 'EntityFramework' }) +{ + Remove-Module 'EntityFramework' +} + +Import-Module (Join-Path $toolsPath 'EntityFramework.psd1') -ArgumentList $installPath diff --git a/packages/EntityFramework.4.3.1/tools/install.ps1 b/packages/EntityFramework.4.3.1/tools/install.ps1 new file mode 100644 index 0000000..5184478 --- /dev/null +++ b/packages/EntityFramework.4.3.1/tools/install.ps1 @@ -0,0 +1,36 @@ +param($installPath, $toolsPath, $package, $project) + +$invoker = @" +public class ConnectionFactoryConfiguratorInvoker +{ + public static void Invoke(string assemblyPath, object project) + { + var appDomain = System.AppDomain.CreateDomain( + "EntityFramework.PowerShell", + null, + new System.AppDomainSetup { ShadowCopyFiles = "true" }); + + appDomain.CreateInstanceFrom( + assemblyPath, + "System.Data.Entity.ConnectionFactoryConfig.ConnectionFactoryConfigurator", + false, + 0, + null, + new object[] { project }, + null, + null); + + System.AppDomain.Unload(appDomain); + } +} +"@ + +$version = (new-object System.Runtime.Versioning.FrameworkName($project.Properties.Item("TargetFrameworkMoniker").Value)).Version + +if ($version -ge (new-object System.Version(4, 5))) +{ + $dte.ItemOperations.OpenFile((Join-Path $toolsPath 'EF4.3on.NET4.5Readme.txt')) +} + +Add-Type -TypeDefinition $invoker +[ConnectionFactoryConfiguratorInvoker]::Invoke((Join-Path $toolsPath "EntityFramework.PowerShell.dll"), $project) diff --git a/packages/EntityFramework.4.3.1/tools/migrate.exe b/packages/EntityFramework.4.3.1/tools/migrate.exe new file mode 100644 index 0000000..b3fdbf4 Binary files /dev/null and b/packages/EntityFramework.4.3.1/tools/migrate.exe differ diff --git a/packages/ExcelLibrary.1.2011.7.30/ExcelLibrary.1.2011.7.30.nupkg b/packages/ExcelLibrary.1.2011.7.30/ExcelLibrary.1.2011.7.30.nupkg new file mode 100644 index 0000000..3e42a7a Binary files /dev/null and b/packages/ExcelLibrary.1.2011.7.30/ExcelLibrary.1.2011.7.30.nupkg differ diff --git a/packages/ExcelLibrary.1.2011.7.30/lib/ExcelLibrary.dll b/packages/ExcelLibrary.1.2011.7.30/lib/ExcelLibrary.dll new file mode 100644 index 0000000..76bd483 Binary files /dev/null and b/packages/ExcelLibrary.1.2011.7.30/lib/ExcelLibrary.dll differ diff --git a/packages/Modernizr.2.5.3/Content/Scripts/modernizr-2.5.3.js b/packages/Modernizr.2.5.3/Content/Scripts/modernizr-2.5.3.js new file mode 100644 index 0000000..c1a6a9a --- /dev/null +++ b/packages/Modernizr.2.5.3/Content/Scripts/modernizr-2.5.3.js @@ -0,0 +1,1265 @@ +/*! + * Modernizr v2.5.3 + * www.modernizr.com + * + * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton + * Available under the BSD and MIT licenses: www.modernizr.com/license/ + */ + +/* + * Modernizr tests which native CSS3 and HTML5 features are available in + * the current UA and makes the results available to you in two ways: + * as properties on a global Modernizr object, and as classes on the + * element. This information allows you to progressively enhance + * your pages with a granular level of control over the experience. + * + * Modernizr has an optional (not included) conditional resource loader + * called Modernizr.load(), based on Yepnope.js (yepnopejs.com). + * To get a build that includes Modernizr.load(), as well as choosing + * which tests to include, go to www.modernizr.com/download/ + * + * Authors Faruk Ates, Paul Irish, Alex Sexton + * Contributors Ryan Seddon, Ben Alman + */ + +window.Modernizr = (function( window, document, undefined ) { + + var version = '2.5.3', + + Modernizr = {}, + + // option for enabling the HTML classes to be added + enableClasses = true, + + docElement = document.documentElement, + + /** + * Create our "modernizr" element that we do most feature tests on. + */ + mod = 'modernizr', + modElem = document.createElement(mod), + mStyle = modElem.style, + + /** + * Create the input element for various Web Forms feature tests. + */ + inputElem = document.createElement('input'), + + smile = ':)', + + toString = {}.toString, + + // List of property values to set for css tests. See ticket #21 + prefixes = ' -webkit- -moz- -o- -ms- '.split(' '), + + // Following spec is to expose vendor-specific style properties as: + // elem.style.WebkitBorderRadius + // and the following would be incorrect: + // elem.style.webkitBorderRadius + + // Webkit ghosts their properties in lowercase but Opera & Moz do not. + // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+ + // erik.eae.net/archives/2008/03/10/21.48.10/ + + // More here: github.com/Modernizr/Modernizr/issues/issue/21 + omPrefixes = 'Webkit Moz O ms', + + cssomPrefixes = omPrefixes.split(' '), + + domPrefixes = omPrefixes.toLowerCase().split(' '), + + ns = {'svg': 'http://www.w3.org/2000/svg'}, + + tests = {}, + inputs = {}, + attrs = {}, + + classes = [], + + slice = classes.slice, + + featureName, // used in testing loop + + + // Inject element with style element and some CSS rules + injectElementWithStyles = function( rule, callback, nodes, testnames ) { + + var style, ret, node, + div = document.createElement('div'), + // After page load injecting a fake body doesn't work so check if body exists + body = document.body, + // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it. + fakeBody = body ? body : document.createElement('body'); + + if ( parseInt(nodes, 10) ) { + // In order not to give false positives we create a node for each test + // This also allows the method to scale for unspecified uses + while ( nodes-- ) { + node = document.createElement('div'); + node.id = testnames ? testnames[nodes] : mod + (nodes + 1); + div.appendChild(node); + } + } + + // '].join(''); + div.id = mod; + // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody. + // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270 + fakeBody.innerHTML += style; + fakeBody.appendChild(div); + if(!body){ + //avoid crashing IE8, if background image is used + fakeBody.style.background = ""; + docElement.appendChild(fakeBody); + } + + ret = callback(div, rule); + // If this is done after page load we don't want to remove the body so check if body exists + !body ? fakeBody.parentNode.removeChild(fakeBody) : div.parentNode.removeChild(div); + + return !!ret; + + }, + + + // adapted from matchMedia polyfill + // by Scott Jehl and Paul Irish + // gist.github.com/786768 + testMediaQuery = function( mq ) { + + var matchMedia = window.matchMedia || window.msMatchMedia; + if ( matchMedia ) { + return matchMedia(mq).matches; + } + + var bool; + + injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) { + bool = (window.getComputedStyle ? + getComputedStyle(node, null) : + node.currentStyle)['position'] == 'absolute'; + }); + + return bool; + + }, + + + /** + * isEventSupported determines if a given element supports the given event + * function from yura.thinkweb2.com/isEventSupported/ + */ + isEventSupported = (function() { + + var TAGNAMES = { + 'select': 'input', 'change': 'input', + 'submit': 'form', 'reset': 'form', + 'error': 'img', 'load': 'img', 'abort': 'img' + }; + + function isEventSupported( eventName, element ) { + + element = element || document.createElement(TAGNAMES[eventName] || 'div'); + eventName = 'on' + eventName; + + // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those + var isSupported = eventName in element; + + if ( !isSupported ) { + // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element + if ( !element.setAttribute ) { + element = document.createElement('div'); + } + if ( element.setAttribute && element.removeAttribute ) { + element.setAttribute(eventName, ''); + isSupported = is(element[eventName], 'function'); + + // If property was created, "remove it" (by setting value to `undefined`) + if ( !is(element[eventName], 'undefined') ) { + element[eventName] = undefined; + } + element.removeAttribute(eventName); + } + } + + element = null; + return isSupported; + } + return isEventSupported; + })(); + + // hasOwnProperty shim by kangax needed for Safari 2.0 support + var _hasOwnProperty = ({}).hasOwnProperty, hasOwnProperty; + if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) { + hasOwnProperty = function (object, property) { + return _hasOwnProperty.call(object, property); + }; + } + else { + hasOwnProperty = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */ + return ((property in object) && is(object.constructor.prototype[property], 'undefined')); + }; + } + + // Taken from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js + // ES-5 15.3.4.5 + // http://es5.github.com/#x15.3.4.5 + + if (!Function.prototype.bind) { + + Function.prototype.bind = function bind(that) { + + var target = this; + + if (typeof target != "function") { + throw new TypeError(); + } + + var args = slice.call(arguments, 1), + bound = function () { + + if (this instanceof bound) { + + var F = function(){}; + F.prototype = target.prototype; + var self = new F; + + var result = target.apply( + self, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return self; + + } else { + + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + + return bound; + }; + } + + /** + * setCss applies given styles to the Modernizr DOM node. + */ + function setCss( str ) { + mStyle.cssText = str; + } + + /** + * setCssAll extrapolates all vendor-specific css strings. + */ + function setCssAll( str1, str2 ) { + return setCss(prefixes.join(str1 + ';') + ( str2 || '' )); + } + + /** + * is returns a boolean for if typeof obj is exactly type. + */ + function is( obj, type ) { + return typeof obj === type; + } + + /** + * contains returns a boolean for if substr is found within str. + */ + function contains( str, substr ) { + return !!~('' + str).indexOf(substr); + } + + /** + * testProps is a generic CSS / DOM property test; if a browser supports + * a certain property, it won't return undefined for it. + * A supported CSS property returns empty string when its not yet set. + */ + function testProps( props, prefixed ) { + for ( var i in props ) { + if ( mStyle[ props[i] ] !== undefined ) { + return prefixed == 'pfx' ? props[i] : true; + } + } + return false; + } + + /** + * testDOMProps is a generic DOM property test; if a browser supports + * a certain property, it won't return undefined for it. + */ + function testDOMProps( props, obj, elem ) { + for ( var i in props ) { + var item = obj[props[i]]; + if ( item !== undefined) { + + // return the property name as a string + if (elem === false) return props[i]; + + // let's bind a function + if (is(item, 'function')){ + // default to autobind unless override + return item.bind(elem || obj); + } + + // return the unbound function or obj or value + return item; + } + } + return false; + } + + /** + * testPropsAll tests a list of DOM properties we want to check against. + * We specify literally ALL possible (known and/or likely) properties on + * the element including the non-vendor prefixed one, for forward- + * compatibility. + */ + function testPropsAll( prop, prefixed, elem ) { + + var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1), + props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); + + // did they call .prefixed('boxSizing') or are we just testing a prop? + if(is(prefixed, "string") || is(prefixed, "undefined")) { + return testProps(props, prefixed); + + // otherwise, they called .prefixed('requestAnimationFrame', window[, elem]) + } else { + props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); + return testDOMProps(props, prefixed, elem); + } + } + + /** + * testBundle tests a list of CSS features that require element and style injection. + * By bundling them together we can reduce the need to touch the DOM multiple times. + */ + /*>>testBundle*/ + var testBundle = (function( styles, tests ) { + var style = styles.join(''), + len = tests.length; + + injectElementWithStyles(style, function( node, rule ) { + var style = document.styleSheets[document.styleSheets.length - 1], + // IE8 will bork if you create a custom build that excludes both fontface and generatedcontent tests. + // So we check for cssRules and that there is a rule available + // More here: github.com/Modernizr/Modernizr/issues/288 & github.com/Modernizr/Modernizr/issues/293 + cssText = style ? (style.cssRules && style.cssRules[0] ? style.cssRules[0].cssText : style.cssText || '') : '', + children = node.childNodes, hash = {}; + + while ( len-- ) { + hash[children[len].id] = children[len]; + } + + /*>>touch*/ Modernizr['touch'] = ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch || (hash['touch'] && hash['touch'].offsetTop) === 9; /*>>touch*/ + /*>>csstransforms3d*/ Modernizr['csstransforms3d'] = (hash['csstransforms3d'] && hash['csstransforms3d'].offsetLeft) === 9 && hash['csstransforms3d'].offsetHeight === 3; /*>>csstransforms3d*/ + /*>>generatedcontent*/Modernizr['generatedcontent'] = (hash['generatedcontent'] && hash['generatedcontent'].offsetHeight) >= 1; /*>>generatedcontent*/ + /*>>fontface*/ Modernizr['fontface'] = /src/i.test(cssText) && + cssText.indexOf(rule.split(' ')[0]) === 0; /*>>fontface*/ + }, len, tests); + + })([ + // Pass in styles to be injected into document + /*>>fontface*/ '@font-face {font-family:"font";src:url("https://")}' /*>>fontface*/ + + /*>>touch*/ ,['@media (',prefixes.join('touch-enabled),('),mod,')', + '{#touch{top:9px;position:absolute}}'].join('') /*>>touch*/ + + /*>>csstransforms3d*/ ,['@media (',prefixes.join('transform-3d),('),mod,')', + '{#csstransforms3d{left:9px;position:absolute;height:3px;}}'].join('')/*>>csstransforms3d*/ + + /*>>generatedcontent*/,['#generatedcontent:after{content:"',smile,'";visibility:hidden}'].join('') /*>>generatedcontent*/ + ], + [ + /*>>fontface*/ 'fontface' /*>>fontface*/ + /*>>touch*/ ,'touch' /*>>touch*/ + /*>>csstransforms3d*/ ,'csstransforms3d' /*>>csstransforms3d*/ + /*>>generatedcontent*/,'generatedcontent' /*>>generatedcontent*/ + + ]);/*>>testBundle*/ + + + /** + * Tests + * ----- + */ + + // The *new* flexbox + // dev.w3.org/csswg/css3-flexbox + + tests['flexbox'] = function() { + return testPropsAll('flexOrder'); + }; + + // The *old* flexbox + // www.w3.org/TR/2009/WD-css3-flexbox-20090723/ + + tests['flexbox-legacy'] = function() { + return testPropsAll('boxDirection'); + }; + + // On the S60 and BB Storm, getContext exists, but always returns undefined + // so we actually have to call getContext() to verify + // github.com/Modernizr/Modernizr/issues/issue/97/ + + tests['canvas'] = function() { + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); + }; + + tests['canvastext'] = function() { + return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function')); + }; + + // this test initiates a new webgl context. + // webk.it/70117 is tracking a legit feature detect proposal + + tests['webgl'] = function() { + try { + var canvas = document.createElement('canvas'), + ret; + ret = !!(window.WebGLRenderingContext && (canvas.getContext('experimental-webgl') || canvas.getContext('webgl'))); + canvas = undefined; + } catch (e){ + ret = false; + } + return ret; + }; + + /* + * The Modernizr.touch test only indicates if the browser supports + * touch events, which does not necessarily reflect a touchscreen + * device, as evidenced by tablets running Windows 7 or, alas, + * the Palm Pre / WebOS (touch) phones. + * + * Additionally, Chrome (desktop) used to lie about its support on this, + * but that has since been rectified: crbug.com/36415 + * + * We also test for Firefox 4 Multitouch Support. + * + * For more info, see: modernizr.github.com/Modernizr/touch.html + */ + + tests['touch'] = function() { + return Modernizr['touch']; + }; + + /** + * geolocation tests for the new Geolocation API specification. + * This test is a standards compliant-only test; for more complete + * testing, including a Google Gears fallback, please see: + * code.google.com/p/geo-location-javascript/ + * or view a fallback solution using google's geo API: + * gist.github.com/366184 + */ + tests['geolocation'] = function() { + return !!navigator.geolocation; + }; + + // Per 1.6: + // This used to be Modernizr.crosswindowmessaging but the longer + // name has been deprecated in favor of a shorter and property-matching one. + // The old API is still available in 1.6, but as of 2.0 will throw a warning, + // and in the first release thereafter disappear entirely. + tests['postmessage'] = function() { + return !!window.postMessage; + }; + + + // Chrome incognito mode used to throw an exception when using openDatabase + // It doesn't anymore. + tests['websqldatabase'] = function() { + return !!window.openDatabase; + }; + + // Vendors had inconsistent prefixing with the experimental Indexed DB: + // - Webkit's implementation is accessible through webkitIndexedDB + // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB + // For speed, we don't test the legacy (and beta-only) indexedDB + tests['indexedDB'] = function() { + return !!testPropsAll("indexedDB",window); + }; + + // documentMode logic from YUI to filter out IE8 Compat Mode + // which false positives. + tests['hashchange'] = function() { + return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7); + }; + + // Per 1.6: + // This used to be Modernizr.historymanagement but the longer + // name has been deprecated in favor of a shorter and property-matching one. + // The old API is still available in 1.6, but as of 2.0 will throw a warning, + // and in the first release thereafter disappear entirely. + tests['history'] = function() { + return !!(window.history && history.pushState); + }; + + tests['draganddrop'] = function() { + var div = document.createElement('div'); + return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div); + }; + + // FIXME: Once FF10 is sunsetted, we can drop prefixed MozWebSocket + // bugzil.la/695635 + tests['websockets'] = function() { + for ( var i = -1, len = cssomPrefixes.length; ++i < len; ){ + if ( window[cssomPrefixes[i] + 'WebSocket'] ){ + return true; + } + } + return 'WebSocket' in window; + }; + + + // css-tricks.com/rgba-browser-support/ + tests['rgba'] = function() { + // Set an rgba() color and check the returned value + + setCss('background-color:rgba(150,255,150,.5)'); + + return contains(mStyle.backgroundColor, 'rgba'); + }; + + tests['hsla'] = function() { + // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally, + // except IE9 who retains it as hsla + + setCss('background-color:hsla(120,40%,100%,.5)'); + + return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla'); + }; + + tests['multiplebgs'] = function() { + // Setting multiple images AND a color on the background shorthand property + // and then querying the style.background property value for the number of + // occurrences of "url(" is a reliable method for detecting ACTUAL support for this! + + setCss('background:url(https://),url(https://),red url(https://)'); + + // If the UA supports multiple backgrounds, there should be three occurrences + // of the string "url(" in the return value for elemStyle.background + + return /(url\s*\(.*?){3}/.test(mStyle.background); + }; + + + // In testing support for a given CSS property, it's legit to test: + // `elem.style[styleName] !== undefined` + // If the property is supported it will return an empty string, + // if unsupported it will return undefined. + + // We'll take advantage of this quick test and skip setting a style + // on our modernizr element, but instead just testing undefined vs + // empty string. + + + tests['backgroundsize'] = function() { + return testPropsAll('backgroundSize'); + }; + + tests['borderimage'] = function() { + return testPropsAll('borderImage'); + }; + + + // Super comprehensive table about all the unique implementations of + // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance + + tests['borderradius'] = function() { + return testPropsAll('borderRadius'); + }; + + // WebOS unfortunately false positives on this test. + tests['boxshadow'] = function() { + return testPropsAll('boxShadow'); + }; + + // FF3.0 will false positive on this test + tests['textshadow'] = function() { + return document.createElement('div').style.textShadow === ''; + }; + + + tests['opacity'] = function() { + // Browsers that actually have CSS Opacity implemented have done so + // according to spec, which means their return values are within the + // range of [0.0,1.0] - including the leading zero. + + setCssAll('opacity:.55'); + + // The non-literal . in this regex is intentional: + // German Chrome returns this value as 0,55 + // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632 + return /^0.55$/.test(mStyle.opacity); + }; + + + // Note, Android < 4 will pass this test, but can only animate + // a single property at a time + // daneden.me/2011/12/putting-up-with-androids-bullshit/ + tests['cssanimations'] = function() { + return testPropsAll('animationName'); + }; + + + tests['csscolumns'] = function() { + return testPropsAll('columnCount'); + }; + + + tests['cssgradients'] = function() { + /** + * For CSS Gradients syntax, please see: + * webkit.org/blog/175/introducing-css-gradients/ + * developer.mozilla.org/en/CSS/-moz-linear-gradient + * developer.mozilla.org/en/CSS/-moz-radial-gradient + * dev.w3.org/csswg/css3-images/#gradients- + */ + + var str1 = 'background-image:', + str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', + str3 = 'linear-gradient(left top,#9f9, white);'; + + setCss( + // legacy webkit syntax (FIXME: remove when syntax not in use anymore) + (str1 + '-webkit- '.split(' ').join(str2 + str1) + // standard syntax // trailing 'background-image:' + + prefixes.join(str3 + str1)).slice(0, -str1.length) + ); + + return contains(mStyle.backgroundImage, 'gradient'); + }; + + + tests['cssreflections'] = function() { + return testPropsAll('boxReflect'); + }; + + + tests['csstransforms'] = function() { + return !!testPropsAll('transform'); + }; + + + tests['csstransforms3d'] = function() { + + var ret = !!testPropsAll('perspective'); + + // Webkit's 3D transforms are passed off to the browser's own graphics renderer. + // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in + // some conditions. As a result, Webkit typically recognizes the syntax but + // will sometimes throw a false positive, thus we must do a more thorough check: + if ( ret && 'webkitPerspective' in docElement.style ) { + + // Webkit allows this media query to succeed only if the feature is enabled. + // `@media (transform-3d),(-o-transform-3d),(-moz-transform-3d),(-ms-transform-3d),(-webkit-transform-3d),(modernizr){ ... }` + ret = Modernizr['csstransforms3d']; + } + return ret; + }; + + + tests['csstransitions'] = function() { + return testPropsAll('transition'); + }; + + + /*>>fontface*/ + // @font-face detection routine by Diego Perini + // javascript.nwbox.com/CSSSupport/ + + // false positives in WebOS: github.com/Modernizr/Modernizr/issues/342 + tests['fontface'] = function() { + return Modernizr['fontface']; + }; + /*>>fontface*/ + + // CSS generated content detection + tests['generatedcontent'] = function() { + return Modernizr['generatedcontent']; + }; + + + + // These tests evaluate support of the video/audio elements, as well as + // testing what types of content they support. + // + // We're using the Boolean constructor here, so that we can extend the value + // e.g. Modernizr.video // true + // Modernizr.video.ogg // 'probably' + // + // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845 + // thx to NielsLeenheer and zcorpan + + // Note: in some older browsers, "no" was a return value instead of empty string. + // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2 + // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5 + + tests['video'] = function() { + var elem = document.createElement('video'), + bool = false; + + // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224 + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,''); + + bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,''); + + bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,''); + } + + } catch(e) { } + + return bool; + }; + + tests['audio'] = function() { + var elem = document.createElement('audio'), + bool = false; + + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,''); + bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,''); + + // Mimetypes accepted: + // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements + // bit.ly/iphoneoscodecs + bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,''); + bool.m4a = ( elem.canPlayType('audio/x-m4a;') || + elem.canPlayType('audio/aac;')) .replace(/^no$/,''); + } + } catch(e) { } + + return bool; + }; + + + // In FF4, if disabled, window.localStorage should === null. + + // Normally, we could not test that directly and need to do a + // `('localStorage' in window) && ` test first because otherwise Firefox will + // throw bugzil.la/365772 if cookies are disabled + + // Also in iOS5 Private Browsing mode, attepting to use localStorage.setItem + // will throw the exception: + // QUOTA_EXCEEDED_ERRROR DOM Exception 22. + // Peculiarly, getItem and removeItem calls do not throw. + + // Because we are forced to try/catch this, we'll go aggressive. + + // Just FWIW: IE8 Compat mode supports these features completely: + // www.quirksmode.org/dom/html5.html + // But IE8 doesn't support either with local files + + tests['localstorage'] = function() { + try { + localStorage.setItem(mod, mod); + localStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + tests['sessionstorage'] = function() { + try { + sessionStorage.setItem(mod, mod); + sessionStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + + tests['webworkers'] = function() { + return !!window.Worker; + }; + + + tests['applicationcache'] = function() { + return !!window.applicationCache; + }; + + + // Thanks to Erik Dahlstrom + tests['svg'] = function() { + return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect; + }; + + // specifically for SVG inline in HTML, not within XHTML + // test page: paulirish.com/demo/inline-svg + tests['inlinesvg'] = function() { + var div = document.createElement('div'); + div.innerHTML = ''; + return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; + }; + + // SVG SMIL animation + tests['smil'] = function() { + return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate'))); + }; + + // This test is only for clip paths in SVG proper, not clip paths on HTML content + // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg + + // However read the comments to dig into applying SVG clippaths to HTML content here: + // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491 + tests['svgclippaths'] = function() { + return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath'))); + }; + + // input features and input types go directly onto the ret object, bypassing the tests loop. + // Hold this guy to execute in a moment. + function webforms() { + // Run through HTML5's new input attributes to see if the UA understands any. + // We're using f which is the element created early on + // Mike Taylr has created a comprehensive resource for testing these attributes + // when applied to all input types: + // miketaylr.com/code/input-type-attr.html + // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + + // Only input placeholder is tested while textarea's placeholder is not. + // Currently Safari 4 and Opera 11 have support only for the input placeholder + // Both tests are available in feature-detects/forms-placeholder.js + Modernizr['input'] = (function( props ) { + for ( var i = 0, len = props.length; i < len; i++ ) { + attrs[ props[i] ] = !!(props[i] in inputElem); + } + if (attrs.list){ + // safari false positive's on datalist: webk.it/74252 + // see also github.com/Modernizr/Modernizr/issues/146 + attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement); + } + return attrs; + })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); + + // Run through HTML5's new input types to see if the UA understands any. + // This is put behind the tests runloop because it doesn't return a + // true/false like all the other tests; instead, it returns an object + // containing each input type with its corresponding true/false value + + // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/ + Modernizr['inputtypes'] = (function(props) { + + for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) { + + inputElem.setAttribute('type', inputElemType = props[i]); + bool = inputElem.type !== 'text'; + + // We first check to see if the type we give it sticks.. + // If the type does, we feed it a textual value, which shouldn't be valid. + // If the value doesn't stick, we know there's input sanitization which infers a custom UI + if ( bool ) { + + inputElem.value = smile; + inputElem.style.cssText = 'position:absolute;visibility:hidden;'; + + if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { + + docElement.appendChild(inputElem); + defaultView = document.defaultView; + + // Safari 2-4 allows the smiley as a value, despite making a slider + bool = defaultView.getComputedStyle && + defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && + // Mobile android web browser has false positive, so must + // check the height to see if the widget is actually there. + (inputElem.offsetHeight !== 0); + + docElement.removeChild(inputElem); + + } else if ( /^(search|tel)$/.test(inputElemType) ){ + // Spec doesnt define any special parsing or detectable UI + // behaviors so we pass these through as true + + // Interestingly, opera fails the earlier test, so it doesn't + // even make it here. + + } else if ( /^(url|email)$/.test(inputElemType) ) { + // Real url and email support comes with prebaked validation. + bool = inputElem.checkValidity && inputElem.checkValidity() === false; + + } else if ( /^color$/.test(inputElemType) ) { + // chuck into DOM and force reflow for Opera bug in 11.00 + // github.com/Modernizr/Modernizr/issues#issue/159 + docElement.appendChild(inputElem); + docElement.offsetWidth; + bool = inputElem.value != smile; + docElement.removeChild(inputElem); + + } else { + // If the upgraded input compontent rejects the :) text, we got a winner + bool = inputElem.value != smile; + } + } + + inputs[ props[i] ] = !!bool; + } + return inputs; + })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); + } + + + // End of test definitions + // ----------------------- + + + + // Run through all tests and detect their support in the current UA. + // todo: hypothetically we could be doing an array of tests and use a basic loop here. + for ( var feature in tests ) { + if ( hasOwnProperty(tests, feature) ) { + // run the test, throw the return value into the Modernizr, + // then based on that boolean, define an appropriate className + // and push it into an array of classes we'll join later. + featureName = feature.toLowerCase(); + Modernizr[featureName] = tests[feature](); + + classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); + } + } + + // input tests need to run. + Modernizr.input || webforms(); + + + /** + * addTest allows the user to define their own feature tests + * the result will be added onto the Modernizr object, + * as well as an appropriate className set on the html element + * + * @param feature - String naming the feature + * @param test - Function returning true if feature is supported, false if not + */ + Modernizr.addTest = function ( feature, test ) { + if ( typeof feature == 'object' ) { + for ( var key in feature ) { + if ( hasOwnProperty( feature, key ) ) { + Modernizr.addTest( key, feature[ key ] ); + } + } + } else { + + feature = feature.toLowerCase(); + + if ( Modernizr[feature] !== undefined ) { + // we're going to quit if you're trying to overwrite an existing test + // if we were to allow it, we'd do this: + // var re = new RegExp("\\b(no-)?" + feature + "\\b"); + // docElement.className = docElement.className.replace( re, '' ); + // but, no rly, stuff 'em. + return Modernizr; + } + + test = typeof test == 'function' ? test() : test; + + docElement.className += ' ' + (test ? '' : 'no-') + feature; + Modernizr[feature] = test; + + } + + return Modernizr; // allow chaining. + }; + + + // Reset modElem.cssText to nothing to reduce memory footprint. + setCss(''); + modElem = inputElem = null; + + //>>BEGIN IEPP + // Enable HTML 5 elements for styling in IE & add HTML5 css + /*! HTML5 Shiv v3.4 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed */ + ;(function(window, document) { + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|form|map|select|textarea)$/i; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + var a = document.createElement('a'); + + a.innerHTML = ''; + + //if the hidden property is implemented we can assume, that the browser supports HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + try { + (document.createElement)('a'); + } catch(e) { + return true; + } + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Shivs the `createElement` and `createDocumentFragment` methods of the document. + * @private + * @param {Document|DocumentFragment} ownerDocument The document. + */ + function shivMethods(ownerDocument) { + var cache = {}, + docCreateElement = ownerDocument.createElement, + docCreateFragment = ownerDocument.createDocumentFragment, + frag = docCreateFragment(); + + ownerDocument.createElement = function(nodeName) { + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + var node = (cache[nodeName] || (cache[nodeName] = docCreateElement(nodeName))).cloneNode(); + return html5.shivMethods && node.canHaveChildren && !reSkip.test(nodeName) ? frag.appendChild(node) : node; + }; + + ownerDocument.createDocumentFragment = Function('h,f', 'return function(){' + + 'var n=f.cloneNode(),c=n.createElement;' + + 'h.shivMethods&&(' + + // unroll the `createElement` calls + getElements().join().replace(/\w+/g, function(nodeName) { + cache[nodeName] = docCreateElement(nodeName); + frag.createElement(nodeName); + return 'c("' + nodeName + '")'; + }) + + ');return n}' + )(html5, frag); + } + + /*--------------------------------------------------------------------------*/ + + /** + * Shivs the given document. + * @memberOf html5 + * @param {Document} ownerDocument The document to shiv. + * @returns {Document} The shived document. + */ + function shivDocument(ownerDocument) { + var shived; + if (ownerDocument.documentShived) { + return ownerDocument; + } + if (html5.shivCSS && !supportsHtml5Styles) { + shived = !!addStyleSheet(ownerDocument, + // corrects block display not defined in IE6/7/8/9 + 'article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}' + + // corrects audio display not defined in IE6/7/8/9 + 'audio{display:none}' + + // corrects canvas and video display not defined in IE6/7/8/9 + 'canvas,video{display:inline-block;*display:inline;*zoom:1}' + + // corrects 'hidden' attribute and audio[controls] display not present in IE7/8/9 + '[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}' + + // adds styling not present in IE6/7/8/9 + 'mark{background:#FF0;color:#000}' + ); + } + if (!supportsUnknownElements) { + shived = !shivMethods(ownerDocument); + } + if (shived) { + ownerDocument.documentShived = shived; + } + return ownerDocument; + } + + /*--------------------------------------------------------------------------*/ + + /** + * The `html5` object is exposed so that more elements can be shived and + * existing shiving can be detected on iframes. + * @type Object + * @example + * + * // options can be changed before the script is included + * html5 = { 'elements': 'mark section', 'shivCSS': false, 'shivMethods': false }; + */ + var html5 = { + + /** + * An array or space separated string of node names of the elements to shiv. + * @memberOf html5 + * @type Array|String + */ + 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video', + + /** + * A flag to indicate that the HTML5 style sheet should be inserted. + * @memberOf html5 + * @type Boolean + */ + 'shivCSS': !(options.shivCSS === false), + + /** + * A flag to indicate that the document's `createElement` and `createDocumentFragment` + * methods should be overwritten. + * @memberOf html5 + * @type Boolean + */ + 'shivMethods': !(options.shivMethods === false), + + /** + * A string to describe the type of `html5` object ("default" or "default print"). + * @memberOf html5 + * @type String + */ + 'type': 'default', + + // shivs the document according to the specified `html5` object options + 'shivDocument': shivDocument + }; + + /*--------------------------------------------------------------------------*/ + + // expose html5 + window.html5 = html5; + + // shiv the document + shivDocument(document); + + }(this, document)); + + //>>END IEPP + + // Assign private properties to the return object with prefix + Modernizr._version = version; + + // expose these for the plugin API. Look in the source for how to join() them against your input + Modernizr._prefixes = prefixes; + Modernizr._domPrefixes = domPrefixes; + Modernizr._cssomPrefixes = cssomPrefixes; + + // Modernizr.mq tests a given media query, live against the current state of the window + // A few important notes: + // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false + // * A max-width or orientation query will be evaluated against the current state, which may change later. + // * You must specify values. Eg. If you are testing support for the min-width media query use: + // Modernizr.mq('(min-width:0)') + // usage: + // Modernizr.mq('only screen and (max-width:768)') + Modernizr.mq = testMediaQuery; + + // Modernizr.hasEvent() detects support for a given event, with an optional element to test on + // Modernizr.hasEvent('gesturestart', elem) + Modernizr.hasEvent = isEventSupported; + + // Modernizr.testProp() investigates whether a given style property is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testProp('pointerEvents') + Modernizr.testProp = function(prop){ + return testProps([prop]); + }; + + // Modernizr.testAllProps() investigates whether a given style property, + // or any of its vendor-prefixed variants, is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testAllProps('boxSizing') + Modernizr.testAllProps = testPropsAll; + + + + // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards + // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... }) + Modernizr.testStyles = injectElementWithStyles; + + + // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input + // Modernizr.prefixed('boxSizing') // 'MozBoxSizing' + + // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style. + // Return values will also be the camelCase variant, if you need to translate that to hypenated style use: + // + // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-'); + + // If you're trying to ascertain which transition end event to bind to, you might do something like... + // + // var transEndEventNames = { + // 'WebkitTransition' : 'webkitTransitionEnd', + // 'MozTransition' : 'transitionend', + // 'OTransition' : 'oTransitionEnd', + // 'msTransition' : 'MsTransitionEnd', + // 'transition' : 'transitionend' + // }, + // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ]; + + Modernizr.prefixed = function(prop, obj, elem){ + if(!obj) { + return testPropsAll(prop, 'pfx'); + } else { + // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame' + return testPropsAll(prop, obj, elem); + } + }; + + + + // Remove "no-js" class from element, if it exists: + docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + + + // Add the new classes to the element. + (enableClasses ? ' js ' + classes.join(' ') : ''); + + return Modernizr; + +})(this, this.document); diff --git a/packages/Modernizr.2.5.3/Modernizr.2.5.3.nupkg b/packages/Modernizr.2.5.3/Modernizr.2.5.3.nupkg new file mode 100644 index 0000000..98ade6d Binary files /dev/null and b/packages/Modernizr.2.5.3/Modernizr.2.5.3.nupkg differ diff --git a/packages/NUnit.2.6.0.12054/NUnit.2.6.0.12054.nupkg b/packages/NUnit.2.6.0.12054/NUnit.2.6.0.12054.nupkg new file mode 100644 index 0000000..b2bfd12 Binary files /dev/null and b/packages/NUnit.2.6.0.12054/NUnit.2.6.0.12054.nupkg differ diff --git a/packages/NUnit.2.6.0.12054/lib/nunit.framework.dll b/packages/NUnit.2.6.0.12054/lib/nunit.framework.dll new file mode 100644 index 0000000..eaea9ee Binary files /dev/null and b/packages/NUnit.2.6.0.12054/lib/nunit.framework.dll differ diff --git a/packages/NUnit.2.6.0.12054/lib/nunit.framework.xml b/packages/NUnit.2.6.0.12054/lib/nunit.framework.xml new file mode 100644 index 0000000..47fadb6 --- /dev/null +++ b/packages/NUnit.2.6.0.12054/lib/nunit.framework.xml @@ -0,0 +1,10845 @@ + + + + nunit.framework + + + + + Attribute used to apply a category to a test + + + + + The name of the category + + + + + Construct attribute for a given category based on + a name. The name may not contain the characters ',', + '+', '-' or '!'. However, this is not checked in the + constructor since it would cause an error to arise at + as the test was loaded without giving a clear indication + of where the problem is located. The error is handled + in NUnitFramework.cs by marking the test as not + runnable. + + The name of the category + + + + Protected constructor uses the Type name as the name + of the category. + + + + + The name of the category + + + + + Used to mark a field for use as a datapoint when executing a theory + within the same fixture that requires an argument of the field's Type. + + + + + Used to mark an array as containing a set of datapoints to be used + executing a theory within the same fixture that requires an argument + of the Type of the array elements. + + + + + Attribute used to provide descriptive text about a + test case or fixture. + + + + + Construct the attribute + + Text describing the test + + + + Gets the test description + + + + + Enumeration indicating how the expected message parameter is to be used + + + + Expect an exact match + + + Expect a message containing the parameter string + + + Match the regular expression provided as a parameter + + + Expect a message that starts with the parameter string + + + + ExpectedExceptionAttribute + + + + + + Constructor for a non-specific exception + + + + + Constructor for a given type of exception + + The type of the expected exception + + + + Constructor for a given exception name + + The full name of the expected exception + + + + Gets or sets the expected exception type + + + + + Gets or sets the full Type name of the expected exception + + + + + Gets or sets the expected message text + + + + + Gets or sets the user message displayed in case of failure + + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets the name of a method to be used as an exception handler + + + + + ExplicitAttribute marks a test or test fixture so that it will + only be run if explicitly executed from the gui or command line + or if it is included by use of a filter. The test will not be + run simply because an enclosing suite is run. + + + + + Default constructor + + + + + Constructor with a reason + + The reason test is marked explicit + + + + The reason test is marked explicit + + + + + Attribute used to mark a test that is to be ignored. + Ignored tests result in a warning message when the + tests are run. + + + + + Constructs the attribute without giving a reason + for ignoring the test. + + + + + Constructs the attribute giving a reason for ignoring the test + + The reason for ignoring the test + + + + The reason for ignoring a test + + + + + Abstract base for Attributes that are used to include tests + in the test run based on environmental settings. + + + + + Constructor with no included items specified, for use + with named property syntax. + + + + + Constructor taking one or more included items + + Comma-delimited list of included items + + + + Name of the item that is needed in order for + a test to run. Multiple itemss may be given, + separated by a comma. + + + + + Name of the item to be excluded. Multiple items + may be given, separated by a comma. + + + + + The reason for including or excluding the test + + + + + PlatformAttribute is used to mark a test fixture or an + individual method as applying to a particular platform only. + + + + + Constructor with no platforms specified, for use + with named property syntax. + + + + + Constructor taking one or more platforms + + Comma-deliminted list of platforms + + + + CultureAttribute is used to mark a test fixture or an + individual method as applying to a particular Culture only. + + + + + Constructor with no cultures specified, for use + with named property syntax. + + + + + Constructor taking one or more cultures + + Comma-deliminted list of cultures + + + + Marks a test to use a combinatorial join of any argument data + provided. NUnit will create a test case for every combination of + the arguments provided. This can result in a large number of test + cases and so should be used judiciously. This is the default join + type, so the attribute need not be used except as documentation. + + + + + PropertyAttribute is used to attach information to a test as a name/value pair.. + + + + + Construct a PropertyAttribute with a name and string value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and int value + + The name of the property + The property value + + + + Construct a PropertyAttribute with a name and double value + + The name of the property + The property value + + + + Constructor for derived classes that set the + property dictionary directly. + + + + + Constructor for use by derived classes that use the + name of the type as the property name. Derived classes + must ensure that the Type of the property value is + a standard type supported by the BCL. Any custom + types will cause a serialization Exception when + in the client. + + + + + Gets the property dictionary for this attribute + + + + + Default constructor + + + + + Marks a test to use pairwise join of any argument data provided. + NUnit will attempt too excercise every pair of argument values at + least once, using as small a number of test cases as it can. With + only two arguments, this is the same as a combinatorial join. + + + + + Default constructor + + + + + Marks a test to use a sequential join of any argument data + provided. NUnit will use arguements for each parameter in + sequence, generating test cases up to the largest number + of argument values provided and using null for any arguments + for which it runs out of values. Normally, this should be + used with the same number of arguments for each parameter. + + + + + Default constructor + + + + + Summary description for MaxTimeAttribute. + + + + + Construct a MaxTimeAttribute, given a time in milliseconds. + + The maximum elapsed time in milliseconds + + + + RandomAttribute is used to supply a set of random values + to a single parameter of a parameterized test. + + + + + ValuesAttribute is used to provide literal arguments for + an individual parameter of a test. + + + + + Abstract base class for attributes that apply to parameters + and supply data for the parameter. + + + + + Gets the data to be provided to the specified parameter + + + + + The collection of data to be returned. Must + be set by any derived attribute classes. + We use an object[] so that the individual + elements may have their type changed in GetData + if necessary. + + + + + Construct with one argument + + + + + + Construct with two arguments + + + + + + + Construct with three arguments + + + + + + + + Construct with an array of arguments + + + + + + Get the collection of values to be used as arguments + + + + + Construct a set of doubles from 0.0 to 1.0, + specifying only the count. + + + + + + Construct a set of doubles from min to max + + + + + + + + Construct a set of ints from min to max + + + + + + + + Get the collection of values to be used as arguments + + + + + RangeAttribute is used to supply a range of values to an + individual parameter of a parameterized test. + + + + + Construct a range of ints using default step of 1 + + + + + + + Construct a range of ints specifying the step size + + + + + + + + Construct a range of longs + + + + + + + + Construct a range of doubles + + + + + + + + Construct a range of floats + + + + + + + + RepeatAttribute may be applied to test case in order + to run it multiple times. + + + + + Construct a RepeatAttribute + + The number of times to run the test + + + + RequiredAddinAttribute may be used to indicate the names of any addins + that must be present in order to run some or all of the tests in an + assembly. If the addin is not loaded, the entire assembly is marked + as NotRunnable. + + + + + Initializes a new instance of the class. + + The required addin. + + + + Gets the name of required addin. + + The required addin name. + + + + Summary description for SetCultureAttribute. + + + + + Construct given the name of a culture + + + + + + Summary description for SetUICultureAttribute. + + + + + Construct given the name of a culture + + + + + + Attribute used to mark a class that contains one-time SetUp + and/or TearDown methods that apply to all the tests in a + namespace or an assembly. + + + + + SetUpFixtureAttribute is used to identify a SetUpFixture + + + + + Attribute used to mark a static (shared in VB) property + that returns a list of tests. + + + + + Attribute used to identify a method that is called + immediately after each test is run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Provide actions to execute before and after tests. + + + + + When implemented by an attribute, this interface implemented to provide actions to execute before and after tests. + + + + + Executed before each test is run + + Provides details about the test that is going to be run. + + + + Executed after each test is run + + Provides details about the test that has just been run. + + + + Provides the target for the action attribute + + The target for the action attribute + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Descriptive text for this test + + + + + TestCaseAttribute is used to mark parameterized test cases + and provide them with their arguments. + + + + + The ITestCaseData interface is implemented by a class + that is able to return complete testcases for use by + a parameterized test method. + + NOTE: This interface is used in both the framework + and the core, even though that results in two different + types. However, sharing the source code guarantees that + the various implementations will be compatible and that + the core is able to reflect successfully over the + framework implementations of ITestCaseData. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Indicates whether a result has been specified. + This is necessary because the result may be + null, so it's value cannot be checked. + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Construct a TestCaseAttribute with a list of arguments. + This constructor is not CLS-Compliant + + + + + + Construct a TestCaseAttribute with a single argument + + + + + + Construct a TestCaseAttribute with a two arguments + + + + + + + Construct a TestCaseAttribute with a three arguments + + + + + + + + Gets the list of arguments to a test case + + + + + Gets or sets the expected result. + + The result. + + + + Gets the expected result. + + The result. + + + + Gets a flag indicating whether an expected + result has been set. + + + + + Gets a list of categories associated with this test; + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + Gets or sets the expected exception. + + The expected exception. + + + + Gets or sets the name the expected exception. + + The expected name of the exception. + + + + Gets or sets the expected message of the expected exception + + The expected message of the exception. + + + + Gets or sets the type of match to be performed on the expected message + + + + + Gets or sets the description. + + The description. + + + + Gets or sets the name of the test. + + The name of the test. + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the ignored status of the test + + + + + Gets or sets the explicit status of the test + + + + + Gets or sets the reason for not running the test + + + + + Gets or sets the reason for not running the test. + Set has the side effect of marking the test as ignored. + + The ignore reason. + + + + FactoryAttribute indicates the source to be used to + provide test cases for a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + An array of the names of the factories that will provide data + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + Gets or sets the category associated with this test. + May be a single category or a comma-separated list. + + + + + [TestFixture] + public class ExampleClass + {} + + + + + Default constructor + + + + + Construct with a object[] representing a set of arguments. + In .NET 2.0, the arguments may later be separated into + type arguments and constructor arguments. + + + + + + Descriptive text for this fixture + + + + + Gets and sets the category for this fixture. + May be a comma-separated list of categories. + + + + + Gets a list of categories for this fixture + + + + + The arguments originally provided to the attribute + + + + + Gets or sets a value indicating whether this should be ignored. + + true if ignore; otherwise, false. + + + + Gets or sets the ignore reason. May set Ignored as a side effect. + + The ignore reason. + + + + Get or set the type arguments. If not set + explicitly, any leading arguments that are + Types are taken as type arguments. + + + + + Attribute used to identify a method that is + called before any tests in a fixture are run. + + + + + Attribute used to identify a method that is called after + all the tests in a fixture have run. The method is + guaranteed to be called, even if an exception is thrown. + + + + + Adding this attribute to a method within a + class makes the method callable from the NUnit test runner. There is a property + called Description which is optional which you can provide a more detailed test + description. This class cannot be inherited. + + + + [TestFixture] + public class Fixture + { + [Test] + public void MethodToTest() + {} + + [Test(Description = "more detailed description")] + publc void TestDescriptionMethod() + {} + } + + + + + + Used on a method, marks the test with a timeout value in milliseconds. + The test will be run in a separate thread and is cancelled if the timeout + is exceeded. Used on a method or assembly, sets the default timeout + for all contained test methods. + + + + + Construct a TimeoutAttribute given a time in milliseconds + + The timeout value in milliseconds + + + + Marks a test that must run in the STA, causing it + to run in a separate thread if necessary. + + On methods, you may also use STAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresSTAAttribute + + + + + Marks a test that must run in the MTA, causing it + to run in a separate thread if necessary. + + On methods, you may also use MTAThreadAttribute + to serve the same purpose. + + + + + Construct a RequiresMTAAttribute + + + + + Marks a test that must run on a separate thread. + + + + + Construct a RequiresThreadAttribute + + + + + Construct a RequiresThreadAttribute, specifying the apartment + + + + + ValueSourceAttribute indicates the source to be used to + provide data for one parameter of a test method. + + + + + Construct with the name of the factory - for use with languages + that don't support params arrays. + + The name of the data source to be used + + + + Construct with a Type and name - for use with languages + that don't support params arrays. + + The Type that will provide data + The name of the method, property or field that will provide data + + + + The name of a the method, property or fiend to be used as a source + + + + + A Type to be used as a source + + + + + AttributeExistsConstraint tests for the presence of a + specified attribute on a Type. + + + + + The Constraint class is the base of all built-in constraints + within NUnit. It provides the operator overloads used to combine + constraints. + + + + + The IConstraintExpression interface is implemented by all + complete and resolvable constraints and expressions. + + + + + Return the top-level constraint for this expression + + + + + + Static UnsetObject used to detect derived constraints + failing to set the actual value. + + + + + The actual value being tested against a constraint + + + + + The display name of this Constraint for use by ToString() + + + + + Argument fields used by ToString(); + + + + + The builder holding this constraint + + + + + Construct a constraint with no arguments + + + + + Construct a constraint with one argument + + + + + Construct a constraint with two arguments + + + + + Sets the ConstraintBuilder holding this constraint + + + + + Write the failure message to the MessageWriter provided + as an argument. The default implementation simply passes + the constraint and the actual value to the writer, which + then displays the constraint description and the value. + + Constraints that need to provide additional details, + such as where the error occured can override this. + + The MessageWriter on which to display the message + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Test whether the constraint is satisfied by an + ActualValueDelegate that returns the value to be tested. + The default implementation simply evaluates the delegate + but derived classes may override it to provide for delayed + processing. + + An ActualValueDelegate + True for success, false for failure + + + + Test whether the constraint is satisfied by a given reference. + The default implementation simply dereferences the value but + derived classes may override it to provide for delayed processing. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Default override of ToString returns the constraint DisplayName + followed by any arguments within angle brackets. + + + + + + Returns the string representation of this constraint + + + + + This operator creates a constraint that is satisfied only if both + argument constraints are satisfied. + + + + + This operator creates a constraint that is satisfied if either + of the argument constraints is satisfied. + + + + + This operator creates a constraint that is satisfied if the + argument constraint is not satisfied. + + + + + Returns a DelayedConstraint with the specified delay time. + + The delay in milliseconds. + + + + + Returns a DelayedConstraint with the specified delay time + and polling interval. + + The delay in milliseconds. + The interval at which to test the constraint. + + + + + The display name of this Constraint for use by ToString(). + The default value is the name of the constraint with + trailing "Constraint" removed. Derived classes may set + this to another name in their constructors. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending And + to the current constraint. + + + + + Returns a ConstraintExpression by appending Or + to the current constraint. + + + + + Class used to detect any derived constraints + that fail to set the actual value in their + Matches override. + + + + + Constructs an AttributeExistsConstraint for a specific attribute Type + + + + + + Tests whether the object provides the expected attribute. + + A Type, MethodInfo, or other ICustomAttributeProvider + True if the expected attribute is present, otherwise false + + + + Writes the description of the constraint to the specified writer + + + + + AttributeConstraint tests that a specified attribute is present + on a Type or other provider and that the value of the attribute + satisfies some other constraint. + + + + + Abstract base class used for prefixes + + + + + The base constraint + + + + + Construct given a base constraint + + + + + + Constructs an AttributeConstraint for a specified attriute + Type and base constraint. + + + + + + + Determines whether the Type or other provider has the + expected attribute and if its value matches the + additional constraint specified. + + + + + Writes a description of the attribute to the specified writer. + + + + + Writes the actual value supplied to the specified writer. + + + + + Returns a string representation of the constraint. + + + + + BasicConstraint is the abstract base for constraints that + perform a simple comparison to a constant value. + + + + + Initializes a new instance of the class. + + The expected. + The description. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullConstraint tests that the actual value is null + + + + + Initializes a new instance of the class. + + + + + TrueConstraint tests that the actual value is true + + + + + Initializes a new instance of the class. + + + + + FalseConstraint tests that the actual value is false + + + + + Initializes a new instance of the class. + + + + + NaNConstraint tests that the actual value is a double or float NaN + + + + + Test that the actual value is an NaN + + + + + + + Write the constraint description to a specified writer + + + + + + BinaryConstraint is the abstract base of all constraints + that combine two other constraints in some fashion. + + + + + The first constraint being combined + + + + + The second constraint being combined + + + + + Construct a BinaryConstraint from two other constraints + + The first constraint + The second constraint + + + + AndConstraint succeeds only if both members succeed. + + + + + Create an AndConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply both member constraints to an actual value, succeeding + succeeding only if both of them succeed. + + The actual value + True if the constraints both succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + OrConstraint succeeds if either member succeeds + + + + + Create an OrConstraint from two other constraints + + The first constraint + The second constraint + + + + Apply the member constraints to an actual value, succeeding + succeeding as soon as one of them succeeds. + + The actual value + True if either constraint succeeded + + + + Write a description for this contraint to a MessageWriter + + The MessageWriter to receive the description + + + + CollectionConstraint is the abstract base class for + constraints that operate on collections. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Determines whether the specified enumerable is empty. + + The enumerable. + + true if the specified enumerable is empty; otherwise, false. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Protected method to be implemented by derived classes + + + + + + + CollectionItemsEqualConstraint is the abstract base class for all + collection constraints that apply some notion of item equality + as a part of their operation. + + + + + Construct an empty CollectionConstraint + + + + + Construct a CollectionConstraint + + + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Compares two collection members for equality + + + + + Return a new CollectionTally for use in making tests + + The collection to be included in the tally + + + + Flag the constraint to ignore case and return self. + + + + + EmptyCollectionConstraint tests whether a collection is empty. + + + + + Check that the collection is empty + + + + + + + Write the constraint description to a MessageWriter + + + + + + UniqueItemsConstraint tests whether all the items in a + collection are unique. + + + + + Check that all items are unique. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionContainsConstraint is used to test whether a collection + contains an expected object as a member. + + + + + Construct a CollectionContainsConstraint + + + + + + Test whether the expected item is contained in the collection + + + + + + + Write a descripton of the constraint to a MessageWriter + + + + + + CollectionEquivalentCOnstraint is used to determine whether two + collections are equivalent. + + + + + Construct a CollectionEquivalentConstraint + + + + + + Test whether two collections are equivalent + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionSubsetConstraint is used to determine whether + one collection is a subset of another + + + + + Construct a CollectionSubsetConstraint + + The collection that the actual value is expected to be a subset of + + + + Test whether the actual collection is a subset of + the expected collection provided. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + CollectionOrderedConstraint is used to test whether a collection is ordered. + + + + + Construct a CollectionOrderedConstraint + + + + + Modifies the constraint to use an IComparer and returns self. + + + + + Modifies the constraint to use an IComparer<T> and returns self. + + + + + Modifies the constraint to use a Comparison<T> and returns self. + + + + + Modifies the constraint to test ordering by the value of + a specified property and returns self. + + + + + Test whether the collection is ordered + + + + + + + Write a description of the constraint to a MessageWriter + + + + + + Returns the string representation of the constraint. + + + + + + If used performs a reverse comparison + + + + + CollectionTally counts (tallies) the number of + occurences of each object in one or more enumerations. + + + + + Construct a CollectionTally object from a comparer and a collection + + + + + Try to remove an object from the tally + + The object to remove + True if successful, false if the object was not found + + + + Try to remove a set of objects from the tally + + The objects to remove + True if successful, false if any object was not found + + + + The number of objects remaining in the tally + + + + + ComparisonAdapter class centralizes all comparisons of + values in NUnit, adapting to the use of any provided + IComparer, IComparer<T> or Comparison<T> + + + + + Returns a ComparisonAdapter that wraps an IComparer + + + + + Returns a ComparisonAdapter that wraps an IComparer<T> + + + + + Returns a ComparisonAdapter that wraps a Comparison<T> + + + + + Compares two objects + + + + + Gets the default ComparisonAdapter, which wraps an + NUnitComparer object. + + + + + Construct a ComparisonAdapter for an IComparer + + + + + Compares two objects + + + + + + + + Construct a default ComparisonAdapter + + + + + ComparisonAdapter<T> extends ComparisonAdapter and + allows use of an IComparer<T> or Comparison<T> + to actually perform the comparison. + + + + + Construct a ComparisonAdapter for an IComparer<T> + + + + + Compare a Type T to an object + + + + + Construct a ComparisonAdapter for a Comparison<T> + + + + + Compare a Type T to an object + + + + + Abstract base class for constraints that compare values to + determine if one is greater than, equal to or less than + the other. This class supplies the Using modifiers. + + + + + ComparisonAdapter to be used in making the comparison + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + + + + Modifies the constraint to use an IComparer and returns self + + + + + Modifies the constraint to use an IComparer<T> and returns self + + + + + Modifies the constraint to use a Comparison<T> and returns self + + + + + Delegate used to delay evaluation of the actual value + to be used in evaluating a constraint + + + + + ConstraintBuilder maintains the stacks that are used in + processing a ConstraintExpression. An OperatorStack + is used to hold operators that are waiting for their + operands to be reognized. a ConstraintStack holds + input constraints as well as the results of each + operator applied. + + + + + Initializes a new instance of the class. + + + + + Appends the specified operator to the expression by first + reducing the operator stack and then pushing the new + operator on the stack. + + The operator to push. + + + + Appends the specified constraint to the expresson by pushing + it on the constraint stack. + + The constraint to push. + + + + Sets the top operator right context. + + The right context. + + + + Reduces the operator stack until the topmost item + precedence is greater than or equal to the target precedence. + + The target precedence. + + + + Resolves this instance, returning a Constraint. If the builder + is not currently in a resolvable state, an exception is thrown. + + The resolved constraint + + + + Gets a value indicating whether this instance is resolvable. + + + true if this instance is resolvable; otherwise, false. + + + + + OperatorStack is a type-safe stack for holding ConstraintOperators + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified operator onto the stack. + + The op. + + + + Pops the topmost operator from the stack. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost operator without modifying the stack. + + The top. + + + + ConstraintStack is a type-safe stack for holding Constraints + + + + + Initializes a new instance of the class. + + The builder. + + + + Pushes the specified constraint. As a side effect, + the constraint's builder field is set to the + ConstraintBuilder owning this stack. + + The constraint. + + + + Pops this topmost constrait from the stack. + As a side effect, the constraint's builder + field is set to null. + + + + + + Gets a value indicating whether this is empty. + + true if empty; otherwise, false. + + + + Gets the topmost constraint without modifying the stack. + + The topmost constraint + + + + ConstraintExpression represents a compound constraint in the + process of being constructed from a series of syntactic elements. + + Individual elements are appended to the expression as they are + reognized. Once an actual Constraint is appended, the expression + returns a resolvable Constraint. + + + + + ConstraintExpressionBase is the abstract base class for the + ConstraintExpression class, which represents a + compound constraint in the process of being constructed + from a series of syntactic elements. + + NOTE: ConstraintExpressionBase is separate because the + ConstraintExpression class was generated in earlier + versions of NUnit. The two classes may be combined + in a future version. + + + + + The ConstraintBuilder holding the elements recognized so far + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a string representation of the expression as it + currently stands. This should only be used for testing, + since it has the side-effect of resolving the expression. + + + + + + Appends an operator to the expression and returns the + resulting expression itself. + + + + + Appends a self-resolving operator to the expression and + returns a new ResolvableConstraintExpression. + + + + + Appends a constraint to the expression and returns that + constraint, which is associated with the current state + of the expression being built. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class passing in a ConstraintBuilder, which may be pre-populated. + + The builder. + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns the constraint provided as an argument - used to allow custom + custom constraints to easily participate in the syntax. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + With is currently a NOP - reserved for future use. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a new ContainsConstraint. This constraint + will, in turn, make use of the appropriate second-level + constraint, depending on the type of the actual argument. + This overload is only used if the item sought is a string, + since any other type implies that we are looking for a + collection member. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The ConstraintOperator class is used internally by a + ConstraintBuilder to represent an operator that + modifies or combines constraints. + + Constraint operators use left and right precedence + values to determine whether the top operator on the + stack should be reduced before pushing a new operator. + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + The syntax element preceding this operator + + + + + The syntax element folowing this operator + + + + + The precedence value used when the operator + is about to be pushed to the stack. + + + + + The precedence value used when the operator + is on the top of the stack. + + + + + PrefixOperator takes a single constraint and modifies + it's action in some way. + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Returns the constraint created by applying this + prefix to another constraint. + + + + + + + Negates the test of the constraint it wraps. + + + + + Constructs a new NotOperator + + + + + Returns a NotConstraint applied to its argument. + + + + + Abstract base for operators that indicate how to + apply a constraint to items in a collection. + + + + + Constructs a CollectionOperator + + + + + Represents a constraint that succeeds if all the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + they all succeed. + + + + + Represents a constraint that succeeds if any of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + any of them succeed. + + + + + Represents a constraint that succeeds if none of the + members of a collection match a base constraint. + + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that succeeds if the specified + count of members of a collection match a base constraint. + + + + + Construct an ExactCountOperator for a specified count + + The expected count + + + + Returns a constraint that will apply the argument + to the members of a collection, succeeding if + none of them succeed. + + + + + Represents a constraint that simply wraps the + constraint provided as an argument, without any + further functionality, but which modifes the + order of evaluation because of its precedence. + + + + + Constructor for the WithOperator + + + + + Returns a constraint that wraps its argument + + + + + Abstract base class for operators that are able to reduce to a + constraint whether or not another syntactic element follows. + + + + + Operator used to test for the presence of a named Property + on an object and optionally apply further tests to the + value of that property. + + + + + Constructs a PropOperator for a particular named property + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Gets the name of the property to which the operator applies + + + + + Operator that tests for the presence of a particular attribute + on a type and optionally applies further tests to the attribute. + + + + + Construct an AttributeOperator for a particular Type + + The Type of attribute tested + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Operator that tests that an exception is thrown and + optionally applies further tests to the exception. + + + + + Construct a ThrowsOperator + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + Abstract base class for all binary operators + + + + + Reduce produces a constraint from the operator and + any arguments. It takes the arguments from the constraint + stack and pushes the resulting constraint on it. + + + + + + Abstract method that produces a constraint by applying + the operator to its left and right constraint arguments. + + + + + Gets the left precedence of the operator + + + + + Gets the right precedence of the operator + + + + + Operator that requires both it's arguments to succeed + + + + + Construct an AndOperator + + + + + Apply the operator to produce an AndConstraint + + + + + Operator that requires at least one of it's arguments to succeed + + + + + Construct an OrOperator + + + + + Apply the operator to produce an OrConstraint + + + + + ContainsConstraint tests a whether a string contains a substring + or a collection contains an object. It postpones the decision of + which test to use until the type of the actual argument is known. + This allows testing whether a string is contained in a collection + or as a substring of another string using the same syntax. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to ignore case and return self. + + + + + Applies a delay to the match so that a match can be evaluated in the future. + + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + If the value of is less than 0 + + + + Creates a new DelayedConstraint + + The inner constraint two decorate + The time interval after which the match is performed + The time interval used for polling + If the value of is less than 0 + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a delegate + + The delegate whose value is to be tested + True for if the base constraint fails, false if it succeeds + + + + Test whether the constraint is satisfied by a given reference. + Overridden to wait for the specified delay period before + calling the base constraint with the dereferenced value. + + A reference to the value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + EmptyDirectoryConstraint is used to test that a directory is empty + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + EmptyConstraint tests a whether a string or collection is empty, + postponing the decision about which test is applied until the + type of the actual argument is known. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EqualConstraint is able to compare an actual value with the + expected value provided in its constructor. Two objects are + considered equal if both are null, or if both have the same + value. NUnit has special semantics for some object types. + + + + + If true, strings in error messages will be clipped + + + + + NUnitEqualityComparer used to test equality. + + + + + Initializes a new instance of the class. + + The expected value. + + + + Flag the constraint to use a tolerance when determining equality. + + Tolerance value to be used + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied Comparison object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Flag the constraint to use the supplied IEqualityComparer object. + + The IComparer object to use. + Self. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write a failure message. Overridden to provide custom + failure messages for EqualConstraint. + + The MessageWriter to write to + + + + Write description of this constraint + + The MessageWriter to write to + + + + Display the failure information for two collections that did not match. + + The MessageWriter on which to display + The expected collection. + The actual collection + The depth of this failure in a set of nested collections + + + + Displays a single line showing the types and sizes of the expected + and actual enumerations, collections or arrays. If both are identical, + the value is only shown once. + + The MessageWriter on which to display + The expected collection or array + The actual collection or array + The indentation level for the message line + + + + Displays a single line showing the point in the expected and actual + arrays at which the comparison failed. If the arrays have different + structures or dimensions, both values are shown. + + The MessageWriter on which to display + The expected array + The actual array + Index of the failure point in the underlying collections + The indentation level for the message line + + + + Display the failure information for two IEnumerables that did not match. + + The MessageWriter on which to display + The expected enumeration. + The actual enumeration + The depth of this failure in a set of nested collections + + + + Flag the constraint to ignore case and return self. + + + + + Flag the constraint to suppress string clipping + and return self. + + + + + Flag the constraint to compare arrays as collections + and return self. + + + + + Switches the .Within() modifier to interpret its tolerance as + a distance in representable values (see remarks). + + Self. + + Ulp stands for "unit in the last place" and describes the minimum + amount a given value can change. For any integers, an ulp is 1 whole + digit. For floating point values, the accuracy of which is better + for smaller numbers and worse for larger numbers, an ulp depends + on the size of the number. Using ulps for comparison of floating + point results instead of fixed tolerances is safer because it will + automatically compensate for the added inaccuracy of larger numbers. + + + + + Switches the .Within() modifier to interpret its tolerance as + a percentage that the actual values is allowed to deviate from + the expected value. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in days. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in hours. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in minutes. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in seconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in milliseconds. + + Self + + + + Causes the tolerance to be interpreted as a TimeSpan in clock ticks. + + Self + + + + EqualityAdapter class handles all equality comparisons + that use an IEqualityComparer, IEqualityComparer<T> + or a ComparisonAdapter. + + + + + Compares two objects, returning true if they are equal + + + + + Returns true if the two objects can be compared by this adapter. + The base adapter cannot handle IEnumerables except for strings. + + + + + Returns an EqualityAdapter that wraps an IComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer. + + + + + Returns an EqualityAdapter that wraps an IEqualityComparer<T>. + + + + + Returns an EqualityAdapter that wraps an IComparer<T>. + + + + + Returns an EqualityAdapter that wraps a Comparison<T>. + + + + + EqualityAdapter that wraps an IComparer. + + + + + Returns true if the two objects can be compared by this adapter. + Generic adapter requires objects of the specified type. + + + + + EqualityAdapter that wraps an IComparer. + + + + Helper routines for working with floating point numbers + + + The floating point comparison code is based on this excellent article: + http://www.cygnus-software.com/papers/comparingfloats/comparingfloats.htm + + + "ULP" means Unit in the Last Place and in the context of this library refers to + the distance between two adjacent floating point numbers. IEEE floating point + numbers can only represent a finite subset of natural numbers, with greater + accuracy for smaller numbers and lower accuracy for very large numbers. + + + If a comparison is allowed "2 ulps" of deviation, that means the values are + allowed to deviate by up to 2 adjacent floating point values, which might be + as low as 0.0000001 for small numbers or as high as 10.0 for large numbers. + + + + + Compares two floating point values for equality + First floating point value to be compared + Second floating point value t be compared + + Maximum number of representable floating point values that are allowed to + be between the left and the right floating point values + + True if both numbers are equal or close to being equal + + + Floating point values can only represent a finite subset of natural numbers. + For example, the values 2.00000000 and 2.00000024 can be stored in a float, + but nothing inbetween them. + + + This comparison will count how many possible floating point values are between + the left and the right number. If the number of possible values between both + numbers is less than or equal to maxUlps, then the numbers are considered as + being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + Compares two double precision floating point values for equality + First double precision floating point value to be compared + Second double precision floating point value t be compared + + Maximum number of representable double precision floating point values that are + allowed to be between the left and the right double precision floating point values + + True if both numbers are equal or close to being equal + + + Double precision floating point values can only represent a limited series of + natural numbers. For example, the values 2.0000000000000000 and 2.0000000000000004 + can be stored in a double, but nothing inbetween them. + + + This comparison will count how many possible double precision floating point + values are between the left and the right number. If the number of possible + values between both numbers is less than or equal to maxUlps, then the numbers + are considered as being equal. + + + Implementation partially follows the code outlined here: + http://www.anttirt.net/2007/08/19/proper-floating-point-comparisons/ + + + + + + Reinterprets the memory contents of a floating point value as an integer value + + + Floating point value whose memory contents to reinterpret + + + The memory contents of the floating point value interpreted as an integer + + + + + Reinterprets the memory contents of a double precision floating point + value as an integer value + + + Double precision floating point value whose memory contents to reinterpret + + + The memory contents of the double precision floating point value + interpreted as an integer + + + + + Reinterprets the memory contents of an integer as a floating point value + + Integer value whose memory contents to reinterpret + + The memory contents of the integer value interpreted as a floating point value + + + + + Reinterprets the memory contents of an integer value as a double precision + floating point value + + Integer whose memory contents to reinterpret + + The memory contents of the integer interpreted as a double precision + floating point value + + + + Union of a floating point variable and an integer + + + The union's value as a floating point variable + + + The union's value as an integer + + + The union's value as an unsigned integer + + + Union of a double precision floating point variable and a long + + + The union's value as a double precision floating point variable + + + The union's value as a long + + + The union's value as an unsigned long + + + + Tests whether a value is greater than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is greater than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is less than the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Tests whether a value is less than or equal to the value supplied to its constructor + + + + + The value against which a comparison is to be made + + + + + Initializes a new instance of the class. + + The expected value. + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + MessageWriter is the abstract base for classes that write + constraint descriptions and messages in some form. The + class has separate methods for writing various components + of a message, allowing implementations to tailor the + presentation as needed. + + + + + Construct a MessageWriter given a culture + + + + + Method to write single line message with optional args, usually + written to precede the general failure message. + + The message to be written + Any arguments used in formatting the message + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the Expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in locating the point where the strings differ + If true, the strings should be clipped to fit the line + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for a modifier + + The modifier. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Abstract method to get the max line length + + + + + Static methods used in creating messages + + + + + Static string used when strings are clipped + + + + + Returns the representation of a type as used in NUnitLite. + This is the same as Type.ToString() except for arrays, + which are displayed with their declared sizes. + + + + + + + Converts any control characters in a string + to their escaped representation. + + The string to be converted + The converted string + + + + Return the a string representation for a set of indices into an array + + Array of indices for which a string is needed + + + + Get an array of indices representing the point in a enumerable, + collection or array corresponding to a single int index into the + collection. + + The collection to which the indices apply + Index in the collection + Array of indices + + + + Clip a string to a given length, starting at a particular offset, returning the clipped + string with ellipses representing the removed parts + + The string to be clipped + The maximum permitted length of the result string + The point at which to start clipping + The clipped string + + + + Clip the expected and actual strings in a coordinated fashion, + so that they may be displayed together. + + + + + + + + + Shows the position two strings start to differ. Comparison + starts at the start index. + + The expected string + The actual string + The index in the strings at which comparison should start + Boolean indicating whether case should be ignored + -1 if no mismatch found, or the index where mismatch found + + + + The Numerics class contains common operations on numeric values. + + + + + Checks the type of the object, returning true if + the object is a numeric type. + + The object to check + true if the object is a numeric type + + + + Checks the type of the object, returning true if + the object is a floating point numeric type. + + The object to check + true if the object is a floating point numeric type + + + + Checks the type of the object, returning true if + the object is a fixed point numeric type. + + The object to check + true if the object is a fixed point numeric type + + + + Test two numeric values for equality, performing the usual numeric + conversions and using a provided or default tolerance. If the tolerance + provided is Empty, this method may set it to a default tolerance. + + The expected value + The actual value + A reference to the tolerance in effect + True if the values are equal + + + + Compare two numeric values, performing the usual numeric conversions. + + The expected value + The actual value + The relationship of the values to each other + + + + NUnitComparer encapsulates NUnit's default behavior + in comparing two objects. + + + + + Compares two objects + + + + + + + + Returns the default NUnitComparer. + + + + + Generic version of NUnitComparer + + + + + + Compare two objects of the same type + + + + + NUnitEqualityComparer encapsulates NUnit's handling of + equality tests between objects. + + + + + + + + + + Compares two objects for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + If true, all string comparisons will ignore case + + + + + If true, arrays will be treated as collections, allowing + those of different dimensions to be compared + + + + + Comparison objects used in comparisons for some constraints. + + + + + Compares two objects for equality within a tolerance. + + + + + Helper method to compare two arrays + + + + + Method to compare two DirectoryInfo objects + + first directory to compare + second directory to compare + true if equivalent, false if not + + + + Returns the default NUnitEqualityComparer + + + + + Gets and sets a flag indicating whether case should + be ignored in determining equality. + + + + + Gets and sets a flag indicating that arrays should be + compared as collections, without regard to their shape. + + + + + Gets and sets an external comparer to be used to + test for equality. It is applied to members of + collections, in place of NUnit's own logic. + + + + + Gets the list of failure points for the last Match performed. + + + + + FailurePoint class represents one point of failure + in an equality test. + + + + + The location of the failure + + + + + The expected value + + + + + The actual value + + + + + Indicates whether the expected value is valid + + + + + Indicates whether the actual value is valid + + + + + PathConstraint serves as the abstract base of constraints + that operate on paths and provides several helper methods. + + + + + The expected path used in the constraint + + + + + The actual path being tested + + + + + Flag indicating whether a caseInsensitive comparison should be made + + + + + Construct a PathConstraint for a give expected path + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Returns true if the expected path and actual path match + + + + + Returns the string representation of this constraint + + + + + Canonicalize the provided path + + + The path in standardized form + + + + Test whether two paths are the same + + The first path + The second path + Indicates whether case should be ignored + + + + + Test whether one path is under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + Indicates whether case should be ignored + + + + + Test whether one path is the same as or under another path + + The first path - supposed to be the parent path + The second path - supposed to be the child path + + + + + Modifies the current instance to be case-insensitve + and returns it. + + + + + Modifies the current instance to be case-sensitve + and returns it. + + + + + Summary description for SamePathConstraint. + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubPathConstraint tests that the actual path is under the expected path + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SamePathOrUnderConstraint tests that one path is under another + + + + + Initializes a new instance of the class. + + The expected path + + + + Test whether the constraint is satisfied by a given value + + The expected path + The actual path + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Predicate constraint wraps a Predicate in a constraint, + returning success if the predicate is true. + + + + + Construct a PredicateConstraint from a predicate + + + + + Determines whether the predicate succeeds when applied + to the actual value. + + + + + Writes the description to a MessageWriter + + + + + NotConstraint negates the effect of some other constraint + + + + + Initializes a new instance of the class. + + The base constraint to be negated. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for if the base constraint fails, false if it succeeds + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a MessageWriter. + + The writer on which the actual value is displayed + + + + AllItemsConstraint applies another constraint to each + item in a collection, succeeding if they all succeed. + + + + + Construct an AllItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + SomeItemsConstraint applies another constraint to each + item in a collection, succeeding if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + succeeding if any item succeeds. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + NoItemConstraint applies another constraint to each + item in a collection, failing if any of them succeeds. + + + + + Construct a SomeItemsConstraint on top of an existing constraint + + + + + + Apply the item constraint to each item in the collection, + failing if any item fails. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + ExactCoutConstraint applies another constraint to each + item in a collection, succeeding only if a specified + number of items succeed. + + + + + Construct an ExactCountConstraint on top of an existing constraint + + + + + + + Apply the item constraint to each item in the collection, + succeeding only if the expected number of items pass. + + + + + + + Write a description of this constraint to a MessageWriter + + + + + + PropertyExistsConstraint tests that a named property + exists on the object provided through Match. + + Originally, PropertyConstraint provided this feature + in addition to making optional tests on the vaue + of the property. The two constraints are now separate. + + + + + Initializes a new instance of the class. + + The name of the property. + + + + Test whether the property exists for a given object + + The object to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + PropertyConstraint extracts a named property and uses + its value as the actual value for a chained constraint. + + + + + Initializes a new instance of the class. + + The name. + The constraint to apply to the property. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of the constraint. + + + + + + RangeConstraint tests whethe two values are within a + specified range. + + + + + Initializes a new instance of the class. + + From. + To. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ResolvableConstraintExpression is used to represent a compound + constraint being constructed at a point where the last operator + may either terminate the expression or may have additional + qualifying constraints added to it. + + It is used, for example, for a Property element or for + an Exception element, either of which may be optionally + followed by constraints that apply to the property or + exception. + + + + + Create a new instance of ResolvableConstraintExpression + + + + + Create a new instance of ResolvableConstraintExpression, + passing in a pre-populated ConstraintBuilder. + + + + + Resolve the current expression to a Constraint + + + + + Appends an And Operator to the expression + + + + + Appends an Or operator to the expression. + + + + + ReusableConstraint wraps a resolved constraint so that it + may be saved and reused as needed. + + + + + Construct a ReusableConstraint + + The constraint or expression to be reused + + + + Conversion operator from a normal constraint to a ReusableConstraint. + + The original constraint to be wrapped as a ReusableConstraint + + + + + Returns the string representation of the constraint. + + A string representing the constraint + + + + Resolves the ReusableConstraint by returning the constraint + that it originally wrapped. + + A resolved constraint + + + + SameAsConstraint tests whether an object is identical to + the object passed to its constructor + + + + + Initializes a new instance of the class. + + The expected object. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation + + + + + BinarySerializableConstraint tests whether + an object is serializable in binary format. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + StringConstraint is the abstract base for constraints + that operate on strings. It supports the IgnoreCase + modifier for string operations. + + + + + The expected value + + + + + Indicates whether tests should be case-insensitive + + + + + Constructs a StringConstraint given an expected value + + The expected value + + + + Modify the constraint to ignore case in matching. + + + + + EmptyStringConstraint tests whether a string is empty. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + NullEmptyStringConstraint tests whether a string is either null or empty. + + + + + Constructs a new NullOrEmptyStringConstraint + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + SubstringConstraint can test whether a string contains + the expected substring. + + + + + Initializes a new instance of the class. + + The expected. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + StartsWithConstraint can test whether a string starts + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + EndsWithConstraint can test whether a string ends + with an expected substring. + + + + + Initializes a new instance of the class. + + The expected string + + + + Test whether the constraint is matched by the actual value. + This is a template method, which calls the IsMatch method + of the derived class. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + RegexConstraint can test whether a string matches + the pattern provided. + + + + + Initializes a new instance of the class. + + The pattern. + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True for success, false for failure + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + ThrowsConstraint is used to test the exception thrown by + a delegate by applying a constraint to it. + + + + + Initializes a new instance of the class, + using a constraint to be applied to the exception. + + A constraint to apply to the caught exception. + + + + Executes the code of the delegate and captures any exception. + If a non-null base constraint was provided, it applies that + constraint to the exception. + + A delegate representing the code to be tested + True if an exception is thrown and the constraint succeeds, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Returns the string representation of this constraint + + + + + Get the actual exception thrown - used by Assert.Throws. + + + + + ThrowsNothingConstraint tests that a delegate does not + throw an exception. + + + + + Test whether the constraint is satisfied by a given value + + The value to be tested + True if no exception is thrown, otherwise false + + + + Converts an ActualValueDelegate to a TestDelegate + before calling the primary overload. + + + + + + + Write the constraint description to a MessageWriter + + The writer on which the description is displayed + + + + Write the actual value for a failing constraint test to a + MessageWriter. The default implementation simply writes + the raw value of actual, leaving it to the writer to + perform any formatting. + + The writer on which the actual value is displayed + + + + Modes in which the tolerance value for a comparison can + be interpreted. + + + + + The tolerance was created with a value, without specifying + how the value would be used. This is used to prevent setting + the mode more than once and is generally changed to Linear + upon execution of the test. + + + + + The tolerance is used as a numeric range within which + two compared values are considered to be equal. + + + + + Interprets the tolerance as the percentage by which + the two compared values my deviate from each other. + + + + + Compares two values based in their distance in + representable numbers. + + + + + The Tolerance class generalizes the notion of a tolerance + within which an equality test succeeds. Normally, it is + used with numeric types, but it can be used with any + type that supports taking a difference between two + objects and comparing that difference to a value. + + + + + Constructs a linear tolerance of a specdified amount + + + + + Constructs a tolerance given an amount and ToleranceMode + + + + + Tests that the current Tolerance is linear with a + numeric value, throwing an exception if it is not. + + + + + Returns an empty Tolerance object, equivalent to + specifying no tolerance. In most cases, it results + in an exact match but for floats and doubles a + default tolerance may be used. + + + + + Returns a zero Tolerance object, equivalent to + specifying an exact match. + + + + + Gets the ToleranceMode for the current Tolerance + + + + + Gets the value of the current Tolerance instance. + + + + + Returns a new tolerance, using the current amount as a percentage. + + + + + Returns a new tolerance, using the current amount in Ulps. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of days. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of hours. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of minutes. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of seconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of milliseconds. + + + + + Returns a new tolerance with a TimeSpan as the amount, using + the current amount as a number of clock ticks. + + + + + Returns true if the current tolerance is empty. + + + + + TypeConstraint is the abstract base for constraints + that take a Type as their expected value. + + + + + The expected Type used by the constraint + + + + + Construct a TypeConstraint for a given Type + + + + + + Write the actual value for a failing constraint test to a + MessageWriter. TypeConstraints override this method to write + the name of the type. + + The writer on which the actual value is displayed + + + + ExactTypeConstraint is used to test that an object + is of the exact type provided in the constructor + + + + + Construct an ExactTypeConstraint for a given Type + + The expected Type. + + + + Test that an object is of the exact type specified + + The actual value. + True if the tested object is of the exact type provided, otherwise false. + + + + Write the description of this constraint to a MessageWriter + + The MessageWriter to use + + + + ExceptionTypeConstraint is a special version of ExactTypeConstraint + used to provided detailed info about the exception thrown in + an error message. + + + + + Constructs an ExceptionTypeConstraint + + + + + Write the actual value for a failing constraint test to a + MessageWriter. Overriden to write additional information + in the case of an Exception. + + The MessageWriter to use + + + + InstanceOfTypeConstraint is used to test that an object + is of the same type provided or derived from it. + + + + + Construct an InstanceOfTypeConstraint for the type provided + + The expected Type + + + + Test whether an object is of the specified type or a derived type + + The object to be tested + True if the object is of the provided type or derives from it, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableFromConstraint is used to test that an object + can be assigned from a given Type. + + + + + Construct an AssignableFromConstraint for the type provided + + + + + + Test whether an object can be assigned from the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + AssignableToConstraint is used to test that an object + can be assigned to a given Type. + + + + + Construct an AssignableToConstraint for the type provided + + + + + + Test whether an object can be assigned to the specified type + + The object to be tested + True if the object can be assigned a value of the expected Type, otherwise false. + + + + Write a description of this constraint to a MessageWriter + + The MessageWriter to use + + + + Thrown when an assertion failed. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when a test executes inconclusively. + + + + + The error message that explains + the reason for the exception + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + Thrown when an assertion failed. + + + + + + + The error message that explains + the reason for the exception + The exception that caused the + current exception + + + + Serialization Constructor + + + + + + + + + + + Compares two objects of a given Type for equality within a tolerance + + The first object to compare + The second object to compare + The tolerance to use in the comparison + + + + + The different targets a test action attribute can be applied to + + + + + Default target, which is determined by where the action attribute is attached + + + + + Target a individual test case + + + + + Target a suite of test cases + + + + + Delegate used by tests that execute code and + capture any thrown exception. + + + + + The Assert class contains a collection of static methods that + implement the most common assertions used in NUnit. + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Helper for Assert.AreEqual(double expected, double actual, ...) + allowing code generation to work consistently. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + The message to initialize the with. + + + + Throws a with the message and arguments + that are passed in. This allows a test to be cut short, with a result + of success returned to NUnit. + + + + + Throws an with the message and arguments + that are passed in. This is used by the other Assert functions. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This is used by the other Assert functions. + + The message to initialize the with. + + + + Throws an . + This is used by the other Assert functions. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as ignored. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as ignored. + + + + + Throws an with the message and arguments + that are passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + Arguments to be used in formatting the message + + + + Throws an with the message that is + passed in. This causes the test to be reported as inconclusive. + + The message to initialize the with. + + + + Throws an . + This causes the test to be reported as Inconclusive. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + Used as a synonym for That in rare cases where a private setter + causes a Visual Basic compilation error. + + + This method is provided for use by VB developers needing to test + the value of properties with private setters. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + A constraint to be satisfied by the exception + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + The exception Type expected + A TestSnippet delegate + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate throws a particular exception when called. + + Type of the expected exception + A TestSnippet delegate + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception when called + and returns it. + + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + The message that will be displayed on failure + + + + Verifies that a delegate throws an exception of a certain Type + or one derived from it when called and returns it. + + The expected Exception Type + A TestDelegate + + + + Verifies that a delegate does not throw an exception + + A TestSnippet delegate + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + The message that will be displayed on failure + + + + Verifies that a delegate does not throw an exception. + + A TestSnippet delegate + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + The message to display in case of failure + + + + Asserts that a condition is false. If the condition is true the method throws + an . + + The evaluated condition + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is not equal to null + If the object is null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + The message to display in case of failure + + + + Verifies that the object that is passed in is equal to null + If the object is not null then an + is thrown. + + The object that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + The message to display in case of failure + + + + Verifies that the double that is passed in is an NaN value. + If the object is not NaN then an + is thrown. + + The value that is to be tested + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is empty - that is equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not empty - that is not equal to string.Empty + + The string to be tested + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + The message to display in case of failure + + + + Assert that an array, list or other collection is not empty + + An array, list or other collection implementing ICollection + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is either null or equal to string.Empty + + The string to be tested + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Assert that a string is not null or empty + + The string to be tested + The message to display in case of failure + + + + Assert that a string is not null or empty + + The string to be tested + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + The message to display in case of failure + + + + Asserts that an object may not be assigned a value of a given Type. + + The expected Type. + The object under examination + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + The message to display in case of failure + + + + Asserts that an object is not an instance of a given type. + + The expected Type + The object being examined + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are equal. If they are not, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + The message to display in case of failure + + + + Verifies that two doubles are equal considering a delta. If the + expected value is infinity then the delta value is ignored. If + they are not equal then an is + thrown. + + The expected value + The actual value + The maximum acceptable difference between the + the expected and the actual + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are not equal an is thrown. + + The value that is expected + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + The message to display in case of failure + + + + Verifies that two values are not equal. If they are equal, then an + is thrown. + + The expected value + The actual value + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + The message to display in case of failure + + + + Verifies that two objects are not equal. Two objects are considered + equal if both are null, or if both have the same value. NUnit + has special semantics for some object types. + If they are equal an is thrown. + + The value that is expected + The actual value + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects refer to the same object. If they + are not the same an is thrown. + + The expected object + The actual object + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + The message to display in case of failure + + + + Asserts that two objects do not refer to the same object. If they + are the same an is thrown. + + The expected object + The actual object + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than the second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + The message to display in case of failure + + + + Verifies that the first value is greater than or equal tothe second + value. If it is not, then an + is thrown. + + The first value, expected to be greater + The second value, expected to be less + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + The message to display in case of failure + + + + Verifies that the first value is less than or equal to the second + value. If it is not, then an + is thrown. + + The first value, expected to be less + The second value, expected to be greater + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + Array of objects to be used in formatting the message + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + The message to display in case of failure + + + + Asserts that an object is contained in a list. + + The expected object + The list to be examined + + + + Gets the number of assertions executed so far and + resets the counter to zero. + + + + + AssertionHelper is an optional base class for user tests, + allowing the use of shorter names for constraints and + asserts and avoiding conflict with the definition of + , from which it inherits much of its + behavior, in certain mock object frameworks. + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. Works + identically to Assert.That + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an assertion exception on failure. + + A Constraint to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to Assert.That. + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically to Assert.That. + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the method throws + an . Works Identically Assert.That. + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + Returns a ListMapper based on a collection. + + The original collection + + + + + Provides static methods to express the assumptions + that must be met for a test to give a meaningful + result. If an assumption is not met, the test + should produce an inconclusive result. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + An ActualValueDelegate returning the value to be tested + The message that will be displayed on failure + + + + Apply a constraint to an actual value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + An ActualValueDelegate returning the value to be tested + A Constraint expression to be applied + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + + + + Apply a constraint to a referenced value, succeeding if the constraint + is satisfied and throwing an InconclusiveException on failure. + + A Constraint expression to be applied + The actual value to test + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + Arguments to be used in formatting the message + + + + Asserts that a condition is true. If the condition is false the method throws + an . + + The evaluated condition + The message to display if the condition is false + + + + Asserts that a condition is true. If the condition is false the + method throws an . + + The evaluated condition + + + + Asserts that the code represented by a delegate throws an exception + that satisfies the constraint provided. + + A TestDelegate to be executed + A ThrowsConstraint used in the test + + + + A set of Assert methods operationg on one or more collections + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + + + + Asserts that all items contained in collection are of the type specified by expectedType. + + IEnumerable containing objects to be considered + System.Type that all objects in collection must be instances of + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable containing objects to be considered + The message that will be displayed on failure + + + + Asserts that all items contained in collection are not equal to null. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Ensures that every object contained in collection exists within the collection + once and only once. + + IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are exactly equal. The collections must have the same count, + and contain the exact same objects in the same order. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are equivalent, containing the same objects but the match may be in any order. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + + + + Asserts that expected and actual are not exactly equal. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not exactly equal. + If comparer is not null then it will be used to compare the objects. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The IComparer to use in comparing objects from each IEnumerable + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + + + + Asserts that expected and actual are not equivalent. + + The first IEnumerable of objects to be considered + The second IEnumerable of objects to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + + + + Asserts that collection contains actual as an item. + + IEnumerable of objects to be considered + Object to be found within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + + + + Asserts that collection does not contain actual as an item. + + IEnumerable of objects to be considered + Object that cannot exist within collection + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is not a subject of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + + + + Asserts that superset is a subset of subset. + + The IEnumerable superset to be considered + The IEnumerable subset to be considered + The message that will be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is empty + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array,list or other collection is empty + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + Arguments to be used in formatting the message + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + The message to be displayed on failure + + + + Assert that an array, list or other collection is ordered + + An array, list or other collection implementing IEnumerable + A custom comparer to perform the comparisons + + + + Static helper class used in the constraint-based syntax + + + + + Creates a new SubstringConstraint + + The value of the substring + A SubstringConstraint + + + + Creates a new CollectionContainsConstraint. + + The item that should be found. + A new CollectionContainsConstraint + + + + Summary description for DirectoryAssert + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are not equal + + + + Verifies that two directories are equal. Two directories are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + The message to display if directories are not equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory containing the value that is expected + A directory containing the actual value + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + Arguments to be used in formatting the message + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + The message to display if directories are equal + + + + Asserts that two directories are not equal. If they are equal + an is thrown. + + A directory path string containing the value that is expected + A directory path string containing the actual value + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is empty. If it is not empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + Arguments to be used in formatting the message + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + The message to display if directories are not equal + + + + Asserts that the directory is not empty. If it is empty + an is thrown. + + A directory to search + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path contains actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + Arguments to be used in formatting the message + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + The message to display if directory is not within the path + + + + Asserts that path does not contain actual as a subdirectory or + an is thrown. + + A directory to search + sub-directory asserted to exist under directory + + + + Summary description for FileAssert. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + We don't actually want any instances of this object, but some people + like to inherit from it to add other static methods. Hence, the + protected constructor disallows any instances of this object. + + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + The message to display if objects are not equal + + + + Verifies that two Streams are equal. Two Streams are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The expected Stream + The actual Stream + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Verifies that two files are equal. Two files are considered + equal if both are null, or if both have the same value byte for byte. + If they are not equal an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the two Stream are the same. + Arguments to be used in formatting the message + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + The message to be displayed when the Streams are the same. + + + + Asserts that two Streams are not equal. If they are equal + an is thrown. + + The expected Stream + The actual Stream + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + A file containing the value that is expected + A file containing the actual value + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if Streams are not equal + Arguments to be used in formatting the message + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + The message to display if objects are not equal + + + + Asserts that two files are not equal. If they are equal + an is thrown. + + The path to a file containing the value that is expected + The path to a file containing the actual value + + + + GlobalSettings is a place for setting default values used + by the framework in performing asserts. + + + + + Default tolerance for floating point equality + + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding only if a specified number of them succeed. + + + + + Returns a new PropertyConstraintExpression, which will either + test for the existence of the named property on the object + being tested or apply any following constraint to that property. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new AttributeConstraint checking for the + presence of a particular attribute on an object. + + + + + Returns a new CollectionContainsConstraint checking for the + presence of a particular object in the collection. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if at least one of them succeeds. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them fail. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Length property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Count property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the Message property of the object being tested. + + + + + Returns a new ConstraintExpression, which will apply the following + constraint to the InnerException property of the object being tested. + + + + + Interface implemented by a user fixture in order to + validate any expected exceptions. It is only called + for test methods marked with the ExpectedException + attribute. + + + + + Method to handle an expected exception + + The exception to be handled + + + + Helper class with properties and methods that supply + a number of constraints used in Asserts. + + + + + Returns a constraint that tests two items for equality + + + + + Returns a constraint that tests that two references are the same object + + + + + Returns a constraint that tests whether the + actual value is greater than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is greater than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the + actual value is less than or equal to the suppled argument + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual + value is of the exact type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is of the type supplied as an argument or a derived type. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is assignable from the type supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a collection containing the same elements as the + collection supplied as an argument. + + + + + Returns a constraint that tests whether the actual value + is a subset of the collection supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that tests whether the path provided + is the same as an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the path provided + is the same path or under an expected path after canonicalization. + + + + + Returns a constraint that tests whether the actual value falls + within a specified range. + + + + + Returns a ConstraintExpression that negates any + following constraint. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + Returns a constraint that tests for null + + + + + Returns a constraint that tests for True + + + + + Returns a constraint that tests for False + + + + + Returns a constraint that tests for a positive value + + + + + Returns a constraint that tests for a negative value + + + + + Returns a constraint that tests for NaN + + + + + Returns a constraint that tests for empty + + + + + Returns a constraint that tests whether a collection + contains all unique items. + + + + + Returns a constraint that tests whether an object graph is serializable in binary format. + + + + + Returns a constraint that tests whether an object graph is serializable in xml format. + + + + + Returns a constraint that tests whether a collection is ordered + + + + + The Iz class is a synonym for Is intended for use in VB, + which regards Is as a keyword. + + + + + The List class is a helper class with properties and methods + that supply a number of constraints used with lists and collections. + + + + + List.Map returns a ListMapper, which can be used to map + the original collection to another collection. + + + + + + + ListMapper is used to transform a collection used as an actual argument + producing another collection to be used in the assertion. + + + + + Construct a ListMapper based on a collection + + The collection to be transformed + + + + Produces a collection containing all the values of a property + + The collection of property values + + + + + Randomizer returns a set of random values in a repeatable + way, to allow re-running of tests if necessary. + + + + + Get a randomizer for a particular member, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Get a randomizer for a particular parameter, returning + one that has already been created if it exists. + This ensures that the same values are generated + each time the tests are reloaded. + + + + + Construct a randomizer using a random seed + + + + + Construct a randomizer using a specified seed + + + + + Return an array of random doubles between 0.0 and 1.0. + + + + + + + Return an array of random doubles with values in a specified range. + + + + + Return an array of random ints with values in a specified range. + + + + + Get a random seed for use in creating a randomizer. + + + + + The SpecialValue enum is used to represent TestCase arguments + that cannot be used as arguments to an Attribute. + + + + + Null represents a null value, which cannot be used as an + argument to an attriute under .NET 1.x + + + + + Basic Asserts on strings. + + + + + The Equals method throws an AssertionException. This is done + to make sure there is no mistake by calling this function. + + + + + + + override the default ReferenceEquals to throw an AssertionException. This + implementation makes sure there is no mistake in calling this function + as part of Assert. + + + + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string is not found within another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string is found within another string. + + The expected string + The string to be examined + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string starts with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not start with another string. + + The expected string + The string to be examined + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string ends with another string. + + The expected string + The string to be examined + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + The message to display in case of failure + + + + Asserts that a string does not end with another string. + + The expected string + The string to be examined + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are equal, without regard to case. + + The expected string + The actual string + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that two strings are Notequal, without regard to case. + + The expected string + The actual string + The message to display in case of failure + + + + Asserts that two strings are not equal, without regard to case. + + The expected string + The actual string + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + The message to display in case of failure + + + + Asserts that a string matches an expected regular expression pattern. + + The regex pattern to be matched + The actual string + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + Arguments used in formatting the message + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + The message to display in case of failure + + + + Asserts that a string does not match an expected regular expression pattern. + + The regex pattern to be used + The actual string + + + + The TestCaseData class represents a set of arguments + and other parameter info to be used for a parameterized + test case. It provides a number of instance modifiers + for use in initializing the test case. + + Note: Instance modifiers are getters that return + the same instance after modifying it's state. + + + + + The argument list to be provided to the test + + + + + The expected result to be returned + + + + + Set to true if this has an expected result + + + + + The expected exception Type + + + + + The FullName of the expected exception + + + + + The name to be used for the test + + + + + The description of the test + + + + + A dictionary of properties, used to add information + to tests without requiring the class to change. + + + + + If true, indicates that the test case is to be ignored + + + + + If true, indicates that the test case is marked explicit + + + + + The reason for ignoring a test case + + + + + Initializes a new instance of the class. + + The arguments. + + + + Initializes a new instance of the class. + + The argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + + + + Initializes a new instance of the class. + + The first argument. + The second argument. + The third argument. + + + + Sets the expected result for the test + + The expected result + A modified TestCaseData + + + + Sets the expected exception type for the test + + Type of the expected exception. + The modified TestCaseData instance + + + + Sets the expected exception type for the test + + FullName of the expected exception. + The modified TestCaseData instance + + + + Sets the name of the test case + + The modified TestCaseData instance + + + + Sets the description for the test case + being constructed. + + The description. + The modified TestCaseData instance. + + + + Applies a category to the test + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Applies a named property to the test + + + + + + + + Ignores this TestCase. + + + + + + Ignores this TestCase, specifying the reason. + + The reason. + + + + + Marks this TestCase as Explicit + + + + + + Marks this TestCase as Explicit, specifying the reason. + + The reason. + + + + + Gets the argument list to be provided to the test + + + + + Gets the expected result + + + + + Returns true if the result has been set + + + + + Gets the expected exception Type + + + + + Gets the FullName of the expected exception + + + + + Gets the name to be used for the test + + + + + Gets the description of the test + + + + + Gets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets a value indicating whether this is explicit. + + true if explicit; otherwise, false. + + + + Gets the ignore reason. + + The ignore reason. + + + + Gets a list of categories associated with this test. + + + + + Gets the property dictionary for this test + + + + + Provide the context information of the current test + + + + + Constructs a TestContext using the provided context dictionary + + A context dictionary + + + + Get the current test context. This is created + as needed. The user may save the context for + use within a test, but it should not be used + outside the test for which it is created. + + + + + Gets a TestAdapter representing the currently executing test in this context. + + + + + Gets a ResultAdapter representing the current result for the test + executing in this context. + + + + + Gets the directory containing the current test assembly. + + + + + Gets the directory to be used for outputing files created + by this test run. + + + + + TestAdapter adapts a Test for consumption by + the user test code. + + + + + Constructs a TestAdapter for this context + + The context dictionary + + + + The name of the test. + + + + + The FullName of the test + + + + + The properties of the test. + + + + + ResultAdapter adapts a TestResult for consumption by + the user test code. + + + + + Construct a ResultAdapter for a context + + The context holding the result + + + + The TestState of current test. This maps to the ResultState + used in nunit.core and is subject to change in the future. + + + + + The TestStatus of current test. This enum will be used + in future versions of NUnit and so is to be preferred + to the TestState value. + + + + + Provides details about a test + + + + + Creates an instance of TestDetails + + The fixture that the test is a member of, if available. + The method that implements the test, if available. + The full name of the test. + A string representing the type of test, e.g. "Test Case". + Indicates if the test represents a suite of tests. + + + + The fixture that the test is a member of, if available. + + + + + The method that implements the test, if available. + + + + + The full name of the test. + + + + + A string representing the type of test, e.g. "Test Case". + + + + + Indicates if the test represents a suite of tests. + + + + + The ResultState enum indicates the result of running a test + + + + + The result is inconclusive + + + + + The test was not runnable. + + + + + The test has been skipped. + + + + + The test has been ignored. + + + + + The test succeeded + + + + + The test failed + + + + + The test encountered an unexpected exception + + + + + The test was cancelled by the user + + + + + The TestStatus enum indicates the result of running a test + + + + + The test was inconclusive + + + + + The test has skipped + + + + + The test succeeded + + + + + The test failed + + + + + Helper class with static methods used to supply constraints + that operate on strings. + + + + + Returns a constraint that succeeds if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value contains the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value starts with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that fails if the actual + value ends with the substring supplied as an argument. + + + + + Returns a constraint that succeeds if the actual + value matches the Regex pattern supplied as an argument. + + + + + Returns a constraint that fails if the actual + value matches the pattern supplied as an argument. + + + + + Returns a ConstraintExpression, which will apply + the following constraint to all members of a collection, + succeeding if all of them succeed. + + + + + TextMessageWriter writes constraint descriptions and messages + in displayable form as a text stream. It tailors the display + of individual message components to form the standard message + format of NUnit assertion failure messages. + + + + + Prefix used for the expected value line of a message + + + + + Prefix used for the actual value line of a message + + + + + Length of a message prefix + + + + + Construct a TextMessageWriter + + + + + Construct a TextMessageWriter, specifying a user message + and optional formatting arguments. + + + + + + + Method to write single line message with optional args, usually + written to precede the general failure message, at a givel + indentation level. + + The indentation level of the message + The message to be written + Any arguments used in formatting the message + + + + Display Expected and Actual lines for a constraint. This + is called by MessageWriter's default implementation of + WriteMessageTo and provides the generic two-line display. + + The constraint that failed + + + + Display Expected and Actual lines for given values. This + method may be called by constraints that need more control over + the display of actual and expected values than is provided + by the default implementation. + + The expected value + The actual value causing the failure + + + + Display Expected and Actual lines for given values, including + a tolerance value on the expected line. + + The expected value + The actual value causing the failure + The tolerance within which the test was made + + + + Display the expected and actual string values on separate lines. + If the mismatch parameter is >=0, an additional line is displayed + line containing a caret that points to the mismatch point. + + The expected string value + The actual string value + The point at which the strings don't match or -1 + If true, case is ignored in string comparisons + If true, clip the strings to fit the max line length + + + + Writes the text for a connector. + + The connector. + + + + Writes the text for a predicate. + + The predicate. + + + + Write the text for a modifier. + + The modifier. + + + + Writes the text for an expected value. + + The expected value. + + + + Writes the text for an actual value. + + The actual value. + + + + Writes the text for a generalized value. + + The value. + + + + Writes the text for a collection value, + starting at a particular point, to a max length + + The collection containing elements to write. + The starting point of the elements to write + The maximum number of elements to write + + + + Write the generic 'Expected' line for a constraint + + The constraint that failed + + + + Write the generic 'Expected' line for a given value + + The expected value + + + + Write the generic 'Expected' line for a given value + and tolerance. + + The expected value + The tolerance within which the test was made + + + + Write the generic 'Actual' line for a constraint + + The constraint for which the actual value is to be written + + + + Write the generic 'Actual' line for a given value + + The actual value causing a failure + + + + Gets or sets the maximum line length for this writer + + + + + Helper class with properties and methods that supply + constraints that operate on exceptions. + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the exact type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying the type of exception expected + + + + + Creates a constraint specifying an expected exception + + + + + Creates a constraint specifying an exception with a given InnerException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying an expected TargetInvocationException + + + + + Creates a constraint specifying that no exception is thrown + + + + diff --git a/packages/NUnit.2.6.0.12054/license.txt b/packages/NUnit.2.6.0.12054/license.txt new file mode 100644 index 0000000..530a6e0 --- /dev/null +++ b/packages/NUnit.2.6.0.12054/license.txt @@ -0,0 +1,15 @@ +Copyright © 2002-2012 Charlie Poole +Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov +Copyright © 2000-2002 Philip A. Craig + +This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment (see the following) in the product documentation is required. + +Portions Copyright © 2002-2012 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig + +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source distribution. diff --git a/packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2-vsdoc.js b/packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2-vsdoc.js new file mode 100644 index 0000000..bb466aa --- /dev/null +++ b/packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2-vsdoc.js @@ -0,0 +1,7223 @@ +/* +* This file has been generated to support Visual Studio IntelliSense. +* You should not use this file at runtime inside the browser--it is only +* intended to be used only for design-time IntelliSense. Please use the +* standard jQuery library for all production use. +* +* Comment version: 1.7.2 +*/ + +/*! +* jQuery JavaScript Library v1.7.2 +* http://jquery.com/ +* +* Distributed in whole under the terms of the MIT +* +* Copyright 2010, John Resig +* +* Permission is hereby granted, free of charge, to any person obtaining +* a copy of this software and associated documentation files (the +* "Software"), to deal in the Software without restriction, including +* without limitation the rights to use, copy, modify, merge, publish, +* distribute, sublicense, and/or sell copies of the Software, and to +* permit persons to whom the Software is furnished to do so, subject to +* the following conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +* +* Includes Sizzle.js +* http://sizzlejs.com/ +* Copyright 2010, The Dojo Foundation +* Released under the MIT and BSD Licenses. +*/ + +(function (window, undefined) { + var jQuery = function (selector, context) { + /// + /// 1: Accepts a string containing a CSS selector which is then used to match a set of elements. + /// 1.1 - $(selector, context) + /// 1.2 - $(element) + /// 1.3 - $(object) + /// 1.4 - $(elementArray) + /// 1.5 - $(jQuery object) + /// 1.6 - $() + /// 2: Creates DOM elements on the fly from the provided string of raw HTML. + /// 2.1 - $(html, ownerDocument) + /// 2.2 - $(html, props) + /// 3: Binds a function to be executed when the DOM has finished loading. + /// 3.1 - $(callback) + /// + /// + /// A string containing a selector expression + /// + /// + /// A DOM Element, Document, or jQuery to use as context + /// + /// + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.Callbacks = function (flags) { + /// + /// A multi-purpose callbacks list object that provides a powerful way to manage callback lists. + /// + /// + /// An optional list of space-separated flags that change how the callback list behaves. + /// + + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? (flagsCache[flags] || createFlags(flags)) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function (args) { + var i, + length, + elem, + type, + actual; + for (i = 0, length = args.length; i < length; i++) { + elem = args[i]; + type = jQuery.type(elem); + if (type === "array") { + // Inspect recursively + add(elem); + } else if (type === "function") { + // Add if not in unique mode and callback is not in + if (!flags.unique || !self.has(elem)) { + list.push(elem); + } + } + } + }, + // Fire callbacks + fire = function (context, args) { + args = args || []; + memory = !flags.memory || [context, args]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for (; list && firingIndex < firingLength; firingIndex++) { + if (list[firingIndex].apply(context, args) === false && flags.stopOnFalse) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if (list) { + if (!flags.once) { + if (stack && stack.length) { + memory = stack.shift(); + self.fireWith(memory[0], memory[1]); + } + } else if (memory === true) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function () { + if (list) { + var length = list.length; + add(arguments); + // Do we need to add the callbacks to the + // current firing batch? + if (firing) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if (memory && memory !== true) { + firingStart = length; + fire(memory[0], memory[1]); + } + } + return this; + }, + // Remove a callback from the list + remove: function () { + if (list) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for (; argIndex < argLength ; argIndex++) { + for (var i = 0; i < list.length; i++) { + if (args[argIndex] === list[i]) { + // Handle firingIndex and firingLength + if (firing) { + if (i <= firingLength) { + firingLength--; + if (i <= firingIndex) { + firingIndex--; + } + } + } + // Remove the element + list.splice(i--, 1); + // If we have some unicity property then + // we only need to do this once + if (flags.unique) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function (fn) { + if (list) { + var i = 0, + length = list.length; + for (; i < length; i++) { + if (fn === list[i]) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function () { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function () { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function () { + return !list; + }, + // Lock the list in its current state + lock: function () { + stack = undefined; + if (!memory || memory === true) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function () { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function (context, args) { + if (stack) { + if (firing) { + if (!flags.once) { + stack.push([context, args]); + } + } else if (!(flags.once && memory)) { + fire(context, args); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function () { + self.fireWith(this, arguments); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function () { + return !!fired; + } + }; + + return self; + }; + jQuery.Deferred = function (func) { + + var doneList = jQuery.Callbacks("once memory"), + failList = jQuery.Callbacks("once memory"), + progressList = jQuery.Callbacks("memory"), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function () { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function (doneCallbacks, failCallbacks, progressCallbacks) { + deferred.done(doneCallbacks).fail(failCallbacks).progress(progressCallbacks); + return this; + }, + always: function () { + deferred.done.apply(deferred, arguments).fail.apply(deferred, arguments); + return this; + }, + pipe: function (fnDone, fnFail, fnProgress) { + return jQuery.Deferred(function (newDefer) { + jQuery.each({ + done: [fnDone, "resolve"], + fail: [fnFail, "reject"], + progress: [fnProgress, "notify"] + }, function (handler, data) { + var fn = data[0], + action = data[1], + returned; + if (jQuery.isFunction(fn)) { + deferred[handler](function () { + returned = fn.apply(this, arguments); + if (returned && jQuery.isFunction(returned.promise)) { + returned.promise().then(newDefer.resolve, newDefer.reject, newDefer.notify); + } else { + newDefer[action + "With"](this === deferred ? newDefer : this, [returned]); + } + }); + } else { + deferred[handler](newDefer[action]); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function (obj) { + if (obj == null) { + obj = promise; + } else { + for (var key in promise) { + obj[key] = promise[key]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for (key in lists) { + deferred[key] = lists[key].fire; + deferred[key + "With"] = lists[key].fireWith; + } + + // Handle state + deferred.done(function () { + state = "resolved"; + }, failList.disable, progressList.lock).fail(function () { + state = "rejected"; + }, doneList.disable, progressList.lock); + + // Call given func if any + if (func) { + func.call(deferred, deferred); + } + + // All done! + return deferred; + }; + jQuery.Event = function (src, props) { + + // Allow instantiation without the 'new' keyword + if (!(this instanceof jQuery.Event)) { + return new jQuery.Event(src, props); + } + + // Event object + if (src && src.type) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if (props) { + jQuery.extend(this, props); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[jQuery.expando] = true; + }; + jQuery._data = function (elem, name, data) { + + return jQuery.data(elem, name, data, true); + }; + jQuery._mark = function (elem, type) { + + if (elem) { + type = (type || "fx") + "mark"; + jQuery._data(elem, type, (jQuery._data(elem, type) || 0) + 1); + } + }; + jQuery._unmark = function (force, elem, type) { + + if (force !== true) { + type = elem; + elem = force; + force = false; + } + if (elem) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ((jQuery._data(elem, key) || 1) - 1); + if (count) { + jQuery._data(elem, key, count); + } else { + jQuery.removeData(elem, key, true); + handleQueueMarkDefer(elem, type, "mark"); + } + } + }; + jQuery.acceptData = function (elem) { + + if (elem.nodeName) { + var match = jQuery.noData[elem.nodeName.toLowerCase()]; + + if (match) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + }; + jQuery.access = function (elems, fn, key, value, chainable, emptyGet, pass) { + + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if (key && typeof key === "object") { + for (i in key) { + jQuery.access(elems, fn, i, key[i], 1, emptyGet, value); + } + chainable = 1; + + // Sets one value + } else if (value !== undefined) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction(value); + + if (bulk) { + // Bulk operations only iterate when executing function values + if (exec) { + exec = fn; + fn = function (elem, key, value) { + return exec.call(jQuery(elem), value); + }; + + // Otherwise they run against the entire set + } else { + fn.call(elems, value); + fn = null; + } + } + + if (fn) { + for (; i < length; i++) { + fn(elems[i], key, exec ? value.call(elems[i], i, fn(elems[i], key)) : value, pass); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call(elems) : + length ? fn(elems[0], key) : emptyGet; + }; + jQuery.active = 0; + jQuery.ajax = function (url, options) { + /// + /// Perform an asynchronous HTTP (Ajax) request. + /// 1 - jQuery.ajax(url, settings) + /// 2 - jQuery.ajax(settings) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A set of key/value pairs that configure the Ajax request. All settings are optional. A default can be set for any option with $.ajaxSetup(). See jQuery.ajax( settings ) below for a complete list of all settings. + /// + + + // If url is an object, simulate pre-1.5 signature + if (typeof url === "object") { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var // Create the final options object + s = jQuery.ajaxSetup({}, options), + // Callbacks context + callbackContext = s.context || s, + // Context for global events + // It's the callbackContext if one was provided in the options + // and if it's a DOM node or a jQuery collection + globalEventContext = callbackContext !== s && + (callbackContext.nodeType || callbackContext instanceof jQuery) ? + jQuery(callbackContext) : jQuery.event, + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks("once memory"), + // Status-dependent callbacks + statusCode = s.statusCode || {}, + // ifModified key + ifModifiedKey, + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + // Response headers + responseHeadersString, + responseHeaders, + // transport + transport, + // timeout handle + timeoutTimer, + // Cross-domain detection vars + parts, + // The jqXHR state + state = 0, + // To know if global events are to be dispatched + fireGlobals, + // Loop variable + i, + // Fake xhr + jqXHR = { + + readyState: 0, + + // Caches the header + setRequestHeader: function (name, value) { + if (!state) { + var lname = name.toLowerCase(); + name = requestHeadersNames[lname] = requestHeadersNames[lname] || name; + requestHeaders[name] = value; + } + return this; + }, + + // Raw string + getAllResponseHeaders: function () { + return state === 2 ? responseHeadersString : null; + }, + + // Builds headers hashtable if needed + getResponseHeader: function (key) { + var match; + if (state === 2) { + if (!responseHeaders) { + responseHeaders = {}; + while ((match = rheaders.exec(responseHeadersString))) { + responseHeaders[match[1].toLowerCase()] = match[2]; + } + } + match = responseHeaders[key.toLowerCase()]; + } + return match === undefined ? null : match; + }, + + // Overrides response content-type header + overrideMimeType: function (type) { + if (!state) { + s.mimeType = type; + } + return this; + }, + + // Cancel the request + abort: function (statusText) { + statusText = statusText || "abort"; + if (transport) { + transport.abort(statusText); + } + done(0, statusText); + return this; + } + }; + + // Callback for when everything is done + // It is defined here because jslint complains if it is declared + // at the end of the function (which would be more logical and readable) + function done(status, nativeStatusText, responses, headers) { + + // Called once + if (state === 2) { + return; + } + + // State is "done" now + state = 2; + + // Clear timeout if it exists + if (timeoutTimer) { + clearTimeout(timeoutTimer); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + var isSuccess, + success, + error, + statusText = nativeStatusText, + response = responses ? ajaxHandleResponses(s, jqXHR, responses) : undefined, + lastModified, + etag; + + // If successful, handle type chaining + if (status >= 200 && status < 300 || status === 304) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if (s.ifModified) { + + if ((lastModified = jqXHR.getResponseHeader("Last-Modified"))) { + jQuery.lastModified[ifModifiedKey] = lastModified; + } + if ((etag = jqXHR.getResponseHeader("Etag"))) { + jQuery.etag[ifModifiedKey] = etag; + } + } + + // If not modified + if (status === 304) { + + statusText = "notmodified"; + isSuccess = true; + + // If we have data + } else { + + try { + success = ajaxConvert(s, response); + statusText = "success"; + isSuccess = true; + } catch (e) { + // We have a parsererror + statusText = "parsererror"; + error = e; + } + } + } else { + // We extract error from statusText + // then normalize statusText and status for non-aborts + error = statusText; + if (!statusText || status) { + statusText = "error"; + if (status < 0) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = "" + (nativeStatusText || statusText); + + // Success/Error + if (isSuccess) { + deferred.resolveWith(callbackContext, [success, statusText, jqXHR]); + } else { + deferred.rejectWith(callbackContext, [jqXHR, statusText, error]); + } + + // Status-dependent callbacks + jqXHR.statusCode(statusCode); + statusCode = undefined; + + if (fireGlobals) { + globalEventContext.trigger("ajax" + (isSuccess ? "Success" : "Error"), + [jqXHR, s, isSuccess ? success : error]); + } + + // Complete + completeDeferred.fireWith(callbackContext, [jqXHR, statusText]); + + if (fireGlobals) { + globalEventContext.trigger("ajaxComplete", [jqXHR, s]); + // Handle the global AJAX counter + if (!(--jQuery.active)) { + jQuery.event.trigger("ajaxStop"); + } + } + } + + // Attach deferreds + deferred.promise(jqXHR); + jqXHR.success = jqXHR.done; + jqXHR.error = jqXHR.fail; + jqXHR.complete = completeDeferred.add; + + // Status-dependent callbacks + jqXHR.statusCode = function (map) { + if (map) { + var tmp; + if (state < 2) { + for (tmp in map) { + statusCode[tmp] = [statusCode[tmp], map[tmp]]; + } + } else { + tmp = map[jqXHR.status]; + jqXHR.then(tmp, tmp); + } + } + return this; + }; + + // Remove hash character (#7531: and string promotion) + // Add protocol if not provided (#5866: IE7 issue with protocol-less urls) + // We also use the url parameter if available + s.url = ((url || s.url) + "").replace(rhash, "").replace(rprotocol, ajaxLocParts[1] + "//"); + + // Extract dataTypes list + s.dataTypes = jQuery.trim(s.dataType || "*").toLowerCase().split(rspacesAjax); + + // Determine if a cross-domain request is in order + if (s.crossDomain == null) { + parts = rurl.exec(s.url.toLowerCase()); + s.crossDomain = !!(parts && + (parts[1] != ajaxLocParts[1] || parts[2] != ajaxLocParts[2] || + (parts[3] || (parts[1] === "http:" ? 80 : 443)) != + (ajaxLocParts[3] || (ajaxLocParts[1] === "http:" ? 80 : 443))) + ); + } + + // Convert data if not already a string + if (s.data && s.processData && typeof s.data !== "string") { + s.data = jQuery.param(s.data, s.traditional); + } + + // Apply prefilters + inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); + + // If request was aborted inside a prefilter, stop there + if (state === 2) { + return false; + } + + // We can fire global events as of now if asked to + fireGlobals = s.global; + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test(s.type); + + // Watch for a new set of requests + if (fireGlobals && jQuery.active++ === 0) { + jQuery.event.trigger("ajaxStart"); + } + + // More options handling for requests with no content + if (!s.hasContent) { + + // If data is available, append data to url + if (s.data) { + s.url += (rquery.test(s.url) ? "&" : "?") + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Get ifModifiedKey before adding the anti-cache parameter + ifModifiedKey = s.url; + + // Add anti-cache in url if needed + if (s.cache === false) { + + var ts = jQuery.now(), + // try replacing _= if it is there + ret = s.url.replace(rts, "$1_=" + ts); + + // if nothing was replaced, add timestamp to the end + s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : ""); + } + } + + // Set the correct header, if data is being sent + if (s.data && s.hasContent && s.contentType !== false || options.contentType) { + jqXHR.setRequestHeader("Content-Type", s.contentType); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if (s.ifModified) { + ifModifiedKey = ifModifiedKey || s.url; + if (jQuery.lastModified[ifModifiedKey]) { + jqXHR.setRequestHeader("If-Modified-Since", jQuery.lastModified[ifModifiedKey]); + } + if (jQuery.etag[ifModifiedKey]) { + jqXHR.setRequestHeader("If-None-Match", jQuery.etag[ifModifiedKey]); + } + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? + s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== "*" ? ", " + allTypes + "; q=0.01" : "") : + s.accepts["*"] + ); + + // Check for headers option + for (i in s.headers) { + jqXHR.setRequestHeader(i, s.headers[i]); + } + + // Allow custom headers/mimetypes and early abort + if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2)) { + // Abort if not done already + jqXHR.abort(); + return false; + + } + + // Install callbacks on deferreds + for (i in { success: 1, error: 1, complete: 1 }) { + jqXHR[i](s[i]); + } + + // Get transport + transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); + + // If no transport, we auto-abort + if (!transport) { + done(-1, "No Transport"); + } else { + jqXHR.readyState = 1; + // Send global event + if (fireGlobals) { + globalEventContext.trigger("ajaxSend", [jqXHR, s]); + } + // Timeout + if (s.async && s.timeout > 0) { + timeoutTimer = setTimeout(function () { + jqXHR.abort("timeout"); + }, s.timeout); + } + + try { + state = 1; + transport.send(requestHeaders, done); + } catch (e) { + // Propagate exception as error if not done + if (state < 2) { + done(-1, e); + // Simply rethrow otherwise + } else { + throw e; + } + } + } + + return jqXHR; + }; + jQuery.ajaxPrefilter = function (dataTypeExpression, func) { + /// + /// Handle custom Ajax options or modify existing options before each request is sent and before they are processed by $.ajax(). + /// + /// + /// An optional string containing one or more space-separated dataTypes + /// + /// + /// A handler to set default values for future Ajax requests. + /// + /// + + + if (typeof dataTypeExpression !== "string") { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if (jQuery.isFunction(func)) { + var dataTypes = dataTypeExpression.toLowerCase().split(rspacesAjax), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for (; i < length; i++) { + dataType = dataTypes[i]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test(dataType); + if (placeBefore) { + dataType = dataType.substr(1) || "*"; + } + list = structure[dataType] = structure[dataType] || []; + // then we add to the structure accordingly + list[placeBefore ? "unshift" : "push"](func); + } + } + }; + jQuery.ajaxSettings = { + "url": 'http://localhost:25812/', + "isLocal": false, + "global": true, + "type": 'GET', + "contentType": 'application/x-www-form-urlencoded; charset=UTF-8', + "processData": true, + "async": true, + "accepts": {}, + "contents": {}, + "responseFields": {}, + "converters": {}, + "flatOptions": {}, + "jsonp": 'callback' + }; + jQuery.ajaxSetup = function (target, settings) { + /// + /// Set default values for future Ajax requests. + /// + /// + /// A set of key/value pairs that configure the default Ajax request. All options are optional. + /// + + if (settings) { + // Building a settings object + ajaxExtend(target, jQuery.ajaxSettings); + } else { + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; + } + ajaxExtend(target, settings); + return target; + }; + jQuery.ajaxTransport = function (dataTypeExpression, func) { + + + if (typeof dataTypeExpression !== "string") { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + if (jQuery.isFunction(func)) { + var dataTypes = dataTypeExpression.toLowerCase().split(rspacesAjax), + i = 0, + length = dataTypes.length, + dataType, + list, + placeBefore; + + // For each dataType in the dataTypeExpression + for (; i < length; i++) { + dataType = dataTypes[i]; + // We control if we're asked to add before + // any existing element + placeBefore = /^\+/.test(dataType); + if (placeBefore) { + dataType = dataType.substr(1) || "*"; + } + list = structure[dataType] = structure[dataType] || []; + // then we add to the structure accordingly + list[placeBefore ? "unshift" : "push"](func); + } + } + }; + jQuery.attr = function (elem, name, value, pass) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + if (pass && name in jQuery.attrFn) { + return jQuery(elem)[name](value); + } + + // Fallback to prop when attributes are not supported + if (typeof elem.getAttribute === "undefined") { + return jQuery.prop(elem, name, value); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if (notxml) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[name] || (rboolean.test(name) ? boolHook : nodeHook); + } + + if (value !== undefined) { + + if (value === null) { + jQuery.removeAttr(elem, name); + return; + + } else if (hooks && "set" in hooks && notxml && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + elem.setAttribute(name, "" + value); + return value; + } + + } else if (hooks && "get" in hooks && notxml && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + + ret = elem.getAttribute(name); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }; + jQuery.attrFn = { + "val": true, + "css": true, + "html": true, + "text": true, + "data": true, + "width": true, + "height": true, + "offset": true, + "blur": true, + "focus": true, + "focusin": true, + "focusout": true, + "load": true, + "resize": true, + "scroll": true, + "unload": true, + "click": true, + "dblclick": true, + "mousedown": true, + "mouseup": true, + "mousemove": true, + "mouseover": true, + "mouseout": true, + "mouseenter": true, + "mouseleave": true, + "change": true, + "select": true, + "submit": true, + "keydown": true, + "keypress": true, + "keyup": true, + "error": true, + "contextmenu": true + }; + jQuery.attrHooks = { + "type": {}, + "value": {}, + "tabindex": {} + }; + jQuery.bindReady = function () { + + if (readyList) { + return; + } + + readyList = jQuery.Callbacks("once memory"); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if (document.readyState === "complete") { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout(jQuery.ready, 1); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if (document.addEventListener) { + // Use the handy event callback + document.addEventListener("DOMContentLoaded", DOMContentLoaded, false); + + // A fallback to window.onload, that will always work + window.addEventListener("load", jQuery.ready, false); + + // If IE event model is used + } else if (document.attachEvent) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent("onreadystatechange", DOMContentLoaded); + + // A fallback to window.onload, that will always work + window.attachEvent("onload", jQuery.ready); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch (e) { } + + if (document.documentElement.doScroll && toplevel) { + doScrollCheck(); + } + } + }; + jQuery.boxModel = true; + jQuery.browser = { + "msie": true, + "version": '10.0' + }; + jQuery.buildFragment = function (args, nodes, scripts) { + + var fragment, cacheable, cacheresults, doc, + first = args[0]; + + // nodes may contain either an explicit document object, + // a jQuery collection or context object. + // If nodes[0] contains a valid object to assign to doc + if (nodes && nodes[0]) { + doc = nodes[0].ownerDocument || nodes[0]; + } + + // Ensure that an attr object doesn't incorrectly stand in as a document object + // Chrome and Firefox seem to allow this to occur and will throw exception + // Fixes #8950 + if (!doc.createDocumentFragment) { + doc = document; + } + + // Only cache "small" (1/2 KB) HTML strings that are associated with the main document + // Cloning options loses the selected state, so don't cache them + // IE 6 doesn't like it when you put or elements in a fragment + // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache + // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501 + if (args.length === 1 && typeof first === "string" && first.length < 512 && doc === document && + first.charAt(0) === "<" && !rnocache.test(first) && + (jQuery.support.checkClone || !rchecked.test(first)) && + (jQuery.support.html5Clone || !rnoshimcache.test(first))) { + + cacheable = true; + + cacheresults = jQuery.fragments[first]; + if (cacheresults && cacheresults !== 1) { + fragment = cacheresults; + } + } + + if (!fragment) { + fragment = doc.createDocumentFragment(); + jQuery.clean(args, doc, fragment, scripts); + } + + if (cacheable) { + jQuery.fragments[first] = cacheresults ? fragment : 1; + } + + return { fragment: fragment, cacheable: cacheable }; + }; + jQuery.cache = {}; + jQuery.camelCase = function (string) { + + return string.replace(rmsPrefix, "ms-").replace(rdashAlpha, fcamelCase); + }; + jQuery.clean = function (elems, context, fragment, scripts) { + + var checkScriptType, script, j, + ret = []; + + context = context || document; + + // !context.createElement fails in IE with an error but returns typeof 'object' + if (typeof context.createElement === "undefined") { + context = context.ownerDocument || context[0] && context[0].ownerDocument || document; + } + + for (var i = 0, elem; (elem = elems[i]) != null; i++) { + if (typeof elem === "number") { + elem += ""; + } + + if (!elem) { + continue; + } + + // Convert html string into DOM nodes + if (typeof elem === "string") { + if (!rhtml.test(elem)) { + elem = context.createTextNode(elem); + } else { + // Fix "XHTML"-style tags in all browsers + elem = elem.replace(rxhtmlTag, "<$1>"); + + // Trim whitespace, otherwise indexOf won't work as expected + var tag = (rtagName.exec(elem) || ["", ""])[1].toLowerCase(), + wrap = wrapMap[tag] || wrapMap._default, + depth = wrap[0], + div = context.createElement("div"), + safeChildNodes = safeFragment.childNodes, + remove; + + // Append wrapper element to unknown element safe doc fragment + if (context === document) { + // Use the fragment we've already created for this document + safeFragment.appendChild(div); + } else { + // Use a fragment created with the owner document + createSafeFragment(context).appendChild(div); + } + + // Go to html and back, then peel off extra wrappers + div.innerHTML = wrap[1] + elem + wrap[2]; + + // Move to the right depth + while (depth--) { + div = div.lastChild; + } + + // Remove IE's autoinserted from table fragments + if (!jQuery.support.tbody) { + + // String was a , *may* have spurious + var hasBody = rtbody.test(elem), + tbody = tag === "table" && !hasBody ? + div.firstChild && div.firstChild.childNodes : + + // String was a bare or + wrap[1] === "
" && !hasBody ? + div.childNodes : + []; + + for (j = tbody.length - 1; j >= 0 ; --j) { + if (jQuery.nodeName(tbody[j], "tbody") && !tbody[j].childNodes.length) { + tbody[j].parentNode.removeChild(tbody[j]); + } + } + } + + // IE completely kills leading whitespace when innerHTML is used + if (!jQuery.support.leadingWhitespace && rleadingWhitespace.test(elem)) { + div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]), div.firstChild); + } + + elem = div.childNodes; + + // Clear elements from DocumentFragment (safeFragment or otherwise) + // to avoid hoarding elements. Fixes #11356 + if (div) { + div.parentNode.removeChild(div); + + // Guard against -1 index exceptions in FF3.6 + if (safeChildNodes.length > 0) { + remove = safeChildNodes[safeChildNodes.length - 1]; + + if (remove && remove.parentNode) { + remove.parentNode.removeChild(remove); + } + } + } + } + } + + // Resets defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + var len; + if (!jQuery.support.appendChecked) { + if (elem[0] && typeof (len = elem.length) === "number") { + for (j = 0; j < len; j++) { + findInputs(elem[j]); + } + } else { + findInputs(elem); + } + } + + if (elem.nodeType) { + ret.push(elem); + } else { + ret = jQuery.merge(ret, elem); + } + } + + if (fragment) { + checkScriptType = function (elem) { + return !elem.type || rscriptType.test(elem.type); + }; + for (i = 0; ret[i]; i++) { + script = ret[i]; + if (scripts && jQuery.nodeName(script, "script") && (!script.type || rscriptType.test(script.type))) { + scripts.push(script.parentNode ? script.parentNode.removeChild(script) : script); + + } else { + if (script.nodeType === 1) { + var jsTags = jQuery.grep(script.getElementsByTagName("script"), checkScriptType); + + ret.splice.apply(ret, [i + 1, 0].concat(jsTags)); + } + fragment.appendChild(script); + } + } + } + + return ret; + }; + jQuery.cleanData = function (elems) { + + var data, id, + cache = jQuery.cache, + special = jQuery.event.special, + deleteExpando = jQuery.support.deleteExpando; + + for (var i = 0, elem; (elem = elems[i]) != null; i++) { + if (elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) { + continue; + } + + id = elem[jQuery.expando]; + + if (id) { + data = cache[id]; + + if (data && data.events) { + for (var type in data.events) { + if (special[type]) { + jQuery.event.remove(elem, type); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent(elem, type, data.handle); + } + } + + // Null the DOM reference to avoid IE6/7/8 leak (#7054) + if (data.handle) { + data.handle.elem = null; + } + } + + if (deleteExpando) { + delete elem[jQuery.expando]; + + } else if (elem.removeAttribute) { + elem.removeAttribute(jQuery.expando); + } + + delete cache[id]; + } + } + }; + jQuery.clone = function (elem, dataAndEvents, deepDataAndEvents) { + + var srcElements, + destElements, + i, + // IE<=8 does not properly clone detached, unknown element nodes + clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test("<" + elem.nodeName + ">") ? + elem.cloneNode(true) : + shimCloneNode(elem); + + if ((!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) { + // IE copies events bound via attachEvent when using cloneNode. + // Calling detachEvent on the clone will also remove the events + // from the original. In order to get around this, we use some + // proprietary methods to clear the events. Thanks to MooTools + // guys for this hotness. + + cloneFixAttributes(elem, clone); + + // Using Sizzle here is crazy slow, so we use getElementsByTagName instead + srcElements = getAll(elem); + destElements = getAll(clone); + + // Weird iteration because IE will replace the length property + // with an element if you are cloning the body and one of the + // elements on the page has a name or id of "length" + for (i = 0; srcElements[i]; ++i) { + // Ensure that the destination node is not null; Fixes #9587 + if (destElements[i]) { + cloneFixAttributes(srcElements[i], destElements[i]); + } + } + } + + // Copy the events from the original to the clone + if (dataAndEvents) { + cloneCopyEvent(elem, clone); + + if (deepDataAndEvents) { + srcElements = getAll(elem); + destElements = getAll(clone); + + for (i = 0; srcElements[i]; ++i) { + cloneCopyEvent(srcElements[i], destElements[i]); + } + } + } + + srcElements = destElements = null; + + // Return the cloned set + return clone; + }; + jQuery.contains = function (a, b) { + /// + /// Check to see if a DOM element is within another DOM element. + /// + /// + /// The DOM element that may contain the other element. + /// + /// + /// The DOM element that may be contained by the other element. + /// + /// + + return a !== b && (a.contains ? a.contains(b) : true); + }; + jQuery.css = function (elem, name, extra) { + + var ret, hooks; + + // Make sure that we're working with the right name + name = jQuery.camelCase(name); + hooks = jQuery.cssHooks[name]; + name = jQuery.cssProps[name] || name; + + // cssFloat needs a special treatment + if (name === "cssFloat") { + name = "float"; + } + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, true, extra)) !== undefined) { + return ret; + + // Otherwise, if a way to get the computed value exists, use that + } else if (curCSS) { + return curCSS(elem, name); + } + }; + jQuery.cssHooks = { + "opacity": {}, + "height": {}, + "width": {}, + "margin": {}, + "padding": {}, + "borderWidth": {} + }; + jQuery.cssNumber = { + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }; + jQuery.cssProps = { "float": 'cssFloat' }; + jQuery.curCSS = function (elem, name, extra) { + + var ret, hooks; + + // Make sure that we're working with the right name + name = jQuery.camelCase(name); + hooks = jQuery.cssHooks[name]; + name = jQuery.cssProps[name] || name; + + // cssFloat needs a special treatment + if (name === "cssFloat") { + name = "float"; + } + + // If a hook was provided get the computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, true, extra)) !== undefined) { + return ret; + + // Otherwise, if a way to get the computed value exists, use that + } else if (curCSS) { + return curCSS(elem, name); + } + }; + jQuery.data = function (elem, name, data, pvt /* Internal Use Only */) { + /// + /// 1: Store arbitrary data associated with the specified element. Returns the value that was set. + /// 1.1 - jQuery.data(element, key, value) + /// 2: Returns value at named data store for the element, as set by jQuery.data(element, name, value), or the full data store for the element. + /// 2.1 - jQuery.data(element, key) + /// 2.2 - jQuery.data(element) + /// + /// + /// The DOM element to associate with the data. + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value. + /// + /// + + if (!jQuery.acceptData(elem)) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[internalKey] : elem[internalKey] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ((!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined) { + return; + } + + if (!id) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if (isNode) { + elem[internalKey] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if (!cache[id]) { + cache[id] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if (!isNode) { + cache[id].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if (typeof name === "object" || typeof name === "function") { + if (pvt) { + cache[id] = jQuery.extend(cache[id], name); + } else { + cache[id].data = jQuery.extend(cache[id].data, name); + } + } + + privateCache = thisCache = cache[id]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if (!pvt) { + if (!thisCache.data) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if (data !== undefined) { + thisCache[jQuery.camelCase(name)] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if (isEvents && !thisCache[name]) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if (getByName) { + + // First Try to find as-is property data + ret = thisCache[name]; + + // Test for null|undefined property data + if (ret == null) { + + // Try to find the camelCased property + ret = thisCache[jQuery.camelCase(name)]; + } + } else { + ret = thisCache; + } + + return ret; + }; + jQuery.dequeue = function (elem, type) { + /// + /// Execute the next function on the queue for the matched element. + /// + /// + /// A DOM element from which to remove and execute a queued function. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + type = type || "fx"; + + var queue = jQuery.queue(elem, type), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if (fn === "inprogress") { + fn = queue.shift(); + } + + if (fn) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if (type === "fx") { + queue.unshift("inprogress"); + } + + jQuery._data(elem, type + ".run", hooks); + fn.call(elem, function () { + jQuery.dequeue(elem, type); + }, hooks); + } + + if (!queue.length) { + jQuery.removeData(elem, type + "queue " + type + ".run", true); + handleQueueMarkDefer(elem, type, "queue"); + } + }; + jQuery.dir = function (elem, dir, until) { + + var matched = [], + cur = elem[dir]; + + while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) { + if (cur.nodeType === 1) { + matched.push(cur); + } + cur = cur[dir]; + } + return matched; + }; + jQuery.each = function (object, callback, args) { + /// + /// A generic iterator function, which can be used to seamlessly iterate over both objects and arrays. Arrays and array-like objects with a length property (such as a function's arguments object) are iterated by numeric index, from 0 to length-1. Other objects are iterated via their named properties. + /// + /// + /// The object or array to iterate over. + /// + /// + /// The function that will be executed on every object. + /// + /// + + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction(object); + + if (args) { + if (isObj) { + for (name in object) { + if (callback.apply(object[name], args) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.apply(object[i++], args) === false) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if (isObj) { + for (name in object) { + if (callback.call(object[name], name, object[name]) === false) { + break; + } + } + } else { + for (; i < length;) { + if (callback.call(object[i], i, object[i++]) === false) { + break; + } + } + } + } + + return object; + }; + jQuery.easing = {}; + jQuery.error = function (msg) { + /// + /// Takes a string and throws an exception containing it. + /// + /// + /// The message to send out. + /// + + throw new Error(msg); + }; + jQuery.etag = {}; + jQuery.event = { + "global": {}, + "customEvent": {}, + "props": ['attrChange', 'attrName', 'relatedNode', 'srcElement', 'altKey', 'bubbles', 'cancelable', 'ctrlKey', 'currentTarget', 'eventPhase', 'metaKey', 'relatedTarget', 'shiftKey', 'target', 'timeStamp', 'view', 'which'], + "fixHooks": {}, + "keyHooks": {}, + "mouseHooks": {}, + "special": {}, + "triggered": {} + }; + jQuery.expr = { + "order": ['ID', 'CLASS', 'NAME', 'TAG'], + "match": {}, + "leftMatch": {}, + "attrMap": {}, + "attrHandle": {}, + "relative": {}, + "find": {}, + "preFilter": {}, + "filters": {}, + "setFilters": {}, + "filter": {}, + ":": {} + }; + jQuery.extend = function () { + /// + /// Merge the contents of two or more objects together into the first object. + /// 1 - jQuery.extend(target, object1, objectN) + /// 2 - jQuery.extend(deep, target, object1, objectN) + /// + /// + /// If true, the merge becomes recursive (aka. deep copy). + /// + /// + /// The object to extend. It will receive the new properties. + /// + /// + /// An object containing additional properties to merge in. + /// + /// + /// Additional objects containing properties to merge in. + /// + /// + + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.filter = function (expr, elems, not) { + + if (not) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [] : + jQuery.find.matches(expr, elems); + }; + jQuery.find = function (query, context, extra, seed) { + + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if (!seed && !Sizzle.isXML(context)) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(query); + + if (match && (context.nodeType === 1 || context.nodeType === 9)) { + // Speed-up: Sizzle("TAG") + if (match[1]) { + return makeArray(context.getElementsByTagName(query), extra); + + // Speed-up: Sizzle(".CLASS") + } else if (match[2] && Expr.find.CLASS && context.getElementsByClassName) { + return makeArray(context.getElementsByClassName(match[2]), extra); + } + } + + if (context.nodeType === 9) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if (query === "body" && context.body) { + return makeArray([context.body], extra); + + // Speed-up: Sizzle("#ID") + } else if (match && match[3]) { + var elem = context.getElementById(match[3]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id === match[3]) { + return makeArray([elem], extra); + } + + } else { + return makeArray([], extra); + } + } + + try { + return makeArray(context.querySelectorAll(query), extra); + } catch (qsaError) { } + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if (context.nodeType === 1 && context.nodeName.toLowerCase() !== "object") { + var oldContext = context, + old = context.getAttribute("id"), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test(query); + + if (!old) { + context.setAttribute("id", nid); + } else { + nid = nid.replace(/'/g, "\\$&"); + } + if (relativeHierarchySelector && hasParent) { + context = context.parentNode; + } + + try { + if (!relativeHierarchySelector || hasParent) { + return makeArray(context.querySelectorAll("[id='" + nid + "'] " + query), extra); + } + + } catch (pseudoError) { + } finally { + if (!old) { + oldContext.removeAttribute("id"); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + jQuery.fn = { + "selector": '', + "jquery": '1.7.2', + "length": 0 + }; + jQuery.fragments = {}; + jQuery.fx = function (elem, options, prop) { + + this.options = options; + this.elem = elem; + this.prop = prop; + + options.orig = options.orig || {}; + }; + jQuery.get = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP GET request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, or html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; + jQuery.getJSON = function (url, data, callback) { + /// + /// Load JSON-encoded data from the server using a GET HTTP request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, data, callback, "json"); + }; + jQuery.getScript = function (url, callback) { + /// + /// Load a JavaScript file from the server using a GET HTTP request, then execute it. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + + return jQuery.get(url, undefined, callback, "script"); + }; + jQuery.globalEval = function (data) { + /// + /// Execute some JavaScript code globally. + /// + /// + /// The JavaScript code to execute. + /// + + if (data && rnotwhite.test(data)) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + (window.execScript || function (data) { + window["eval"].call(window, data); + })(data); + } + }; + jQuery.grep = function (elems, callback, inv) { + /// + /// Finds the elements of an array which satisfy a filter function. The original array is not affected. + /// + /// + /// The array to search through. + /// + /// + /// The function to process each item against. The first argument to the function is the item, and the second argument is the index. The function should return a Boolean value. this will be the global window object. + /// + /// + /// If "invert" is false, or not provided, then the function returns an array consisting of all elements for which "callback" returns true. If "invert" is true, then the function returns an array consisting of all elements for which "callback" returns false. + /// + /// + + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for (var i = 0, length = elems.length; i < length; i++) { + retVal = !!callback(elems[i], i); + if (inv !== retVal) { + ret.push(elems[i]); + } + } + + return ret; + }; + jQuery.guid = 1; + jQuery.hasData = function (elem) { + /// + /// Determine whether an element has any jQuery data associated with it. + /// + /// + /// A DOM element to be checked for data. + /// + /// + + elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando]; + return !!elem && !isEmptyDataObject(elem); + }; + jQuery.holdReady = function (hold) { + /// + /// Holds or releases the execution of jQuery's ready event. + /// + /// + /// Indicates whether the ready hold is being requested or released + /// + /// + + if (hold) { + jQuery.readyWait++; + } else { + jQuery.ready(true); + } + }; + jQuery.inArray = function (elem, array, i) { + /// + /// Search for a specified value within an array and return its index (or -1 if not found). + /// + /// + /// The value to search for. + /// + /// + /// An array through which to search. + /// + /// + /// The index of the array at which to begin the search. The default is 0, which will search the whole array. + /// + /// + + var len; + + if (array) { + if (indexOf) { + return indexOf.call(array, elem, i); + } + + len = array.length; + i = i ? i < 0 ? Math.max(0, len + i) : i : 0; + + for (; i < len; i++) { + // Skip accessing in sparse arrays + if (i in array && array[i] === elem) { + return i; + } + } + } + + return -1; + }; + jQuery.isArray = Array.isArray || function (obj) { + /// + /// Determine whether the argument is an array. + /// + /// + return jQuery.type(obj) === "array"; + }; + jQuery.isEmptyObject = function (obj) { + /// + /// Check to see if an object is empty (contains no properties). + /// + /// + /// The object that will be checked to see if it's empty. + /// + /// + + for (var name in obj) { + return false; + } + return true; + }; + jQuery.isFunction = function (obj) { + /// + /// Determine if the argument passed is a Javascript function object. + /// + /// + /// Object to test whether or not it is a function. + /// + /// + + return jQuery.type(obj) === "function"; + }; + jQuery.isNumeric = function (obj) { + /// + /// Determines whether its argument is a number. + /// + /// + /// The value to be tested. + /// + /// + + return !isNaN(parseFloat(obj)) && isFinite(obj); + }; + jQuery.isPlainObject = function (obj) { + /// + /// Check to see if an object is a plain object (created using "{}" or "new Object"). + /// + /// + /// The object that will be checked to see if it's a plain object. + /// + /// + + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if (!obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow(obj)) { + return false; + } + + try { + // Not own constructor property must be Object + if (obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { + return false; + } + } catch (e) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for (key in obj) { } + + return key === undefined || hasOwn.call(obj, key); + }; + jQuery.isReady = true; + jQuery.isWindow = function (obj) { + /// + /// Determine whether the argument is a window. + /// + /// + /// Object to test whether or not it is a window. + /// + /// + + return obj != null && obj == obj.window; + }; + jQuery.isXMLDoc = function (elem) { + /// + /// Check to see if a DOM node is within an XML document (or is an XML document). + /// + /// + /// The DOM node that will be checked to see if it's in an XML document. + /// + /// + + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; + }; + jQuery.lastModified = {}; + jQuery.makeArray = function (array, results) { + /// + /// Convert an array-like object into a true JavaScript array. + /// + /// + /// Any object to turn into a native Array. + /// + /// + + var ret = results || []; + + if (array != null) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type(array); + + if (array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow(array)) { + push.call(ret, array); + } else { + jQuery.merge(ret, array); + } + } + + return ret; + }; + jQuery.map = function (elems, callback, arg) { + /// + /// Translate all items in an array or object to new array of items. + /// 1 - jQuery.map(array, callback(elementOfArray, indexInArray)) + /// 2 - jQuery.map(arrayOrObject, callback( value, indexOrKey )) + /// + /// + /// The Array to translate. + /// + /// + /// The function to process each item against. The first argument to the function is the array item, the second argument is the index in array The function can return any value. Within the function, this refers to the global (window) object. + /// + /// + + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ((length > 0 && elems[0] && elems[length - 1]) || length === 0 || jQuery.isArray(elems)); + + // Go through the array, translating each of the items to their + if (isArray) { + for (; i < length; i++) { + value = callback(elems[i], i, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + + // Go through every key on the object, + } else { + for (key in elems) { + value = callback(elems[key], key, arg); + + if (value != null) { + ret[ret.length] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply([], ret); + }; + jQuery.merge = function (first, second) { + /// + /// Merge the contents of two arrays together into the first array. + /// + /// + /// The first array to merge, the elements of second added. + /// + /// + /// The second array to merge into the first, unaltered. + /// + /// + + var i = first.length, + j = 0; + + if (typeof second.length === "number") { + for (var l = second.length; j < l; j++) { + first[i++] = second[j]; + } + + } else { + while (second[j] !== undefined) { + first[i++] = second[j++]; + } + } + + first.length = i; + + return first; + }; + jQuery.noConflict = function (deep) { + /// + /// Relinquish jQuery's control of the $ variable. + /// + /// + /// A Boolean indicating whether to remove all jQuery variables from the global scope (including jQuery itself). + /// + /// + + if (window.$ === jQuery) { + window.$ = _$; + } + + if (deep && window.jQuery === jQuery) { + window.jQuery = _jQuery; + } + + return jQuery; + }; + jQuery.noData = { + "embed": true, + "object": 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000', + "applet": true + }; + jQuery.nodeName = function (elem, name) { + + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }; + jQuery.noop = function () { + /// + /// An empty function. + /// + /// + }; + jQuery.now = function () { + /// + /// Return a number representing the current time. + /// + /// + + return (new Date()).getTime(); + }; + jQuery.nth = function (cur, result, dir, elem) { + + result = result || 1; + var num = 0; + + for (; cur; cur = cur[dir]) { + if (cur.nodeType === 1 && ++num === result) { + break; + } + } + + return cur; + }; + jQuery.offset = {}; + jQuery.param = function (a, traditional) { + /// + /// Create a serialized representation of an array or object, suitable for use in a URL query string or Ajax request. + /// 1 - jQuery.param(obj) + /// 2 - jQuery.param(obj, traditional) + /// + /// + /// An array or object to serialize. + /// + /// + /// A Boolean indicating whether to perform a traditional "shallow" serialization. + /// + /// + + var s = [], + add = function (key, value) { + // If value is a function, invoke it and return its value + value = jQuery.isFunction(value) ? value() : value; + s[s.length] = encodeURIComponent(key) + "=" + encodeURIComponent(value); + }; + + // Set traditional to true for jQuery <= 1.3.2 behavior. + if (traditional === undefined) { + traditional = jQuery.ajaxSettings.traditional; + } + + // If an array was passed in, assume that it is an array of form elements. + if (jQuery.isArray(a) || (a.jquery && !jQuery.isPlainObject(a))) { + // Serialize the form elements + jQuery.each(a, function () { + add(this.name, this.value); + }); + + } else { + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for (var prefix in a) { + buildParams(prefix, a[prefix], traditional, add); + } + } + + // Return the resulting serialization + return s.join("&").replace(r20, "+"); + }; + jQuery.parseJSON = function (data) { + /// + /// Takes a well-formed JSON string and returns the resulting JavaScript object. + /// + /// + /// The JSON string to parse. + /// + /// + + if (typeof data !== "string" || !data) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim(data); + + // Attempt to parse using the native JSON parser first + if (window.JSON && window.JSON.parse) { + return window.JSON.parse(data); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if (rvalidchars.test(data.replace(rvalidescape, "@") + .replace(rvalidtokens, "]") + .replace(rvalidbraces, ""))) { + + return (new Function("return " + data))(); + + } + jQuery.error("Invalid JSON: " + data); + }; + jQuery.parseXML = function (data) { + /// + /// Parses a string into an XML document. + /// + /// + /// a well-formed XML string to be parsed + /// + /// + + if (typeof data !== "string" || !data) { + return null; + } + var xml, tmp; + try { + if (window.DOMParser) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString(data, "text/xml"); + } else { // IE + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = "false"; + xml.loadXML(data); + } + } catch (e) { + xml = undefined; + } + if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + jQuery.error("Invalid XML: " + data); + } + return xml; + }; + jQuery.post = function (url, data, callback, type) { + /// + /// Load data from the server using a HTTP POST request. + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed if the request succeeds. + /// + /// + /// The type of data expected from the server. Default: Intelligent Guess (xml, json, script, text, html). + /// + + // shift arguments if data argument was omitted + if (jQuery.isFunction(data)) { + type = type || callback; + callback = data; + data = undefined; + } + + return jQuery.ajax({ + type: method, + url: url, + data: data, + success: callback, + dataType: type + }); + }; + jQuery.prop = function (elem, name, value) { + + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if (!elem || nType === 3 || nType === 8 || nType === 2) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc(elem); + + if (notxml) { + // Fix name and attach hooks + name = jQuery.propFix[name] || name; + hooks = jQuery.propHooks[name]; + } + + if (value !== undefined) { + if (hooks && "set" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) { + return ret; + + } else { + return (elem[name] = value); + } + + } else { + if (hooks && "get" in hooks && (ret = hooks.get(elem, name)) !== null) { + return ret; + + } else { + return elem[name]; + } + } + }; + jQuery.propFix = { + "tabindex": 'tabIndex', + "readonly": 'readOnly', + "for": 'htmlFor', + "class": 'className', + "maxlength": 'maxLength', + "cellspacing": 'cellSpacing', + "cellpadding": 'cellPadding', + "rowspan": 'rowSpan', + "colspan": 'colSpan', + "usemap": 'useMap', + "frameborder": 'frameBorder', + "contenteditable": 'contentEditable' + }; + jQuery.propHooks = { + "tabIndex": {}, + "selected": {} + }; + jQuery.proxy = function (fn, context) { + /// + /// Takes a function and returns a new one that will always have a particular context. + /// 1 - jQuery.proxy(function, context) + /// 2 - jQuery.proxy(context, name) + /// + /// + /// The function whose context will be changed. + /// + /// + /// The object to which the context (this) of the function should be set. + /// + /// + + if (typeof context === "string") { + var tmp = fn[context]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if (!jQuery.isFunction(fn)) { + return undefined; + } + + // Simulated bind + var args = slice.call(arguments, 2), + proxy = function () { + return fn.apply(context, args.concat(slice.call(arguments))); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }; + jQuery.queue = function (elem, type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched element. + /// 1.1 - jQuery.queue(element, queueName) + /// 2: Manipulate the queue of functions to be executed on the matched element. + /// 2.1 - jQuery.queue(element, queueName, newQueue) + /// 2.2 - jQuery.queue(element, queueName, callback()) + /// + /// + /// A DOM element where the array of queued functions is attached. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var q; + if (elem) { + type = (type || "fx") + "queue"; + q = jQuery._data(elem, type); + + // Speed up dequeue by getting out quickly if this is just a lookup + if (data) { + if (!q || jQuery.isArray(data)) { + q = jQuery._data(elem, type, jQuery.makeArray(data)); + } else { + q.push(data); + } + } + return q || []; + } + }; + jQuery.ready = function (wait) { + + // Either a released hold or an DOMready/load event and not yet ready + if ((wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady)) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if (!document.body) { + return setTimeout(jQuery.ready, 1); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if (wait !== true && --jQuery.readyWait > 0) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith(document, [jQuery]); + + // Trigger any bound ready events + if (jQuery.fn.trigger) { + jQuery(document).trigger("ready").off("ready"); + } + } + }; + jQuery.readyWait = 0; + jQuery.removeAttr = function (elem, value) { + + var propName, attrNames, name, l, isBool, + i = 0; + + if (value && elem.nodeType === 1) { + attrNames = value.toLowerCase().split(rspace); + l = attrNames.length; + + for (; i < l; i++) { + name = attrNames[i]; + + if (name) { + propName = jQuery.propFix[name] || name; + isBool = rboolean.test(name); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if (!isBool) { + jQuery.attr(elem, name, ""); + } + elem.removeAttribute(getSetAttribute ? name : propName); + + // Set corresponding property to false for boolean attributes + if (isBool && propName in elem) { + elem[propName] = false; + } + } + } + } + }; + jQuery.removeData = function (elem, name, pvt /* Internal Use Only */) { + /// + /// Remove a previously-stored piece of data. + /// + /// + /// A DOM element from which to remove data. + /// + /// + /// A string naming the piece of data to remove. + /// + /// + + if (!jQuery.acceptData(elem)) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[internalKey] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if (!cache[id]) { + return; + } + + if (name) { + + thisCache = pvt ? cache[id] : cache[id].data; + + if (thisCache) { + + // Support array or space separated string names for data keys + if (!jQuery.isArray(name)) { + + // try the string as a key before any manipulation + if (name in thisCache) { + name = [name]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase(name); + if (name in thisCache) { + name = [name]; + } else { + name = name.split(" "); + } + } + } + + for (i = 0, l = name.length; i < l; i++) { + delete thisCache[name[i]]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if (!(pvt ? isEmptyDataObject : jQuery.isEmptyObject)(thisCache)) { + return; + } + } + } + + // See jQuery.data for more information + if (!pvt) { + delete cache[id].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if (!isEmptyDataObject(cache[id])) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if (jQuery.support.deleteExpando || !cache.setInterval) { + delete cache[id]; + } else { + cache[id] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if (isNode) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if (jQuery.support.deleteExpando) { + delete elem[internalKey]; + } else if (elem.removeAttribute) { + elem.removeAttribute(internalKey); + } else { + elem[internalKey] = null; + } + } + }; + jQuery.removeEvent = function (elem, type, handle) { + + if (elem.removeEventListener) { + elem.removeEventListener(type, handle, false); + } + }; + jQuery.sibling = function (n, elem) { + + var r = []; + + for (; n; n = n.nextSibling) { + if (n.nodeType === 1 && n !== elem) { + r.push(n); + } + } + + return r; + }; + jQuery.speed = function (speed, easing, fn) { + + var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : { + complete: fn || !fn && easing || + jQuery.isFunction(speed) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction(easing) && easing + }; + + opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : + opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default; + + // normalize opt.queue - true/undefined/null -> "fx" + if (opt.queue == null || opt.queue === true) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function (noUnmark) { + if (jQuery.isFunction(opt.old)) { + opt.old.call(this); + } + + if (opt.queue) { + jQuery.dequeue(this, opt.queue); + } else if (noUnmark !== false) { + jQuery._unmark(this); + } + }; + + return opt; + }; + jQuery.style = function (elem, name, value, extra) { + + // Don't set styles on text and comment nodes + if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) { + return; + } + + // Make sure that we're working with the right name + var ret, type, origName = jQuery.camelCase(name), + style = elem.style, hooks = jQuery.cssHooks[origName]; + + name = jQuery.cssProps[origName] || origName; + + // Check if we're setting a value + if (value !== undefined) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if (type === "string" && (ret = rrelNum.exec(value))) { + value = (+(ret[1] + 1) * +ret[2]) + parseFloat(jQuery.css(elem, name)); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if (value == null || type === "number" && isNaN(value)) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if (type === "number" && !jQuery.cssNumber[origName]) { + value += "px"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if (!hooks || !("set" in hooks) || (value = hooks.set(elem, value)) !== undefined) { + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[name] = value; + } catch (e) { } + } + + } else { + // If a hook was provided get the non-computed value from there + if (hooks && "get" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) { + return ret; + } + + // Otherwise just get the value from the style object + return style[name]; + } + }; + jQuery.sub = function () { + /// + /// Creates a new copy of jQuery whose properties and methods can be modified without affecting the original jQuery object. + /// + /// + + function jQuerySub(selector, context) { + return new jQuerySub.fn.init(selector, context); + } + jQuery.extend(true, jQuerySub, this); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init(selector, context) { + if (context && context instanceof jQuery && !(context instanceof jQuerySub)) { + context = jQuerySub(context); + } + + return jQuery.fn.init.call(this, selector, context, rootjQuerySub); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }; + jQuery.support = { + "leadingWhitespace": true, + "tbody": true, + "htmlSerialize": true, + "style": true, + "hrefNormalized": true, + "opacity": true, + "cssFloat": true, + "checkOn": true, + "optSelected": false, + "getSetAttribute": true, + "enctype": true, + "html5Clone": true, + "submitBubbles": true, + "changeBubbles": true, + "focusinBubbles": true, + "deleteExpando": true, + "noCloneEvent": true, + "inlineBlockNeedsLayout": false, + "shrinkWrapBlocks": false, + "reliableMarginRight": true, + "pixelMargin": true, + "boxModel": true, + "noCloneChecked": false, + "optDisabled": true, + "radioValue": false, + "checkClone": true, + "appendChecked": true, + "ajax": true, + "cors": true, + "reliableHiddenOffsets": true, + "doesNotAddBorder": true, + "doesAddBorderForTableAndCells": true, + "fixedPosition": true, + "subtractsBorderForOverflowNotVisible": false, + "doesNotIncludeMarginInBodyOffset": true + }; + jQuery.swap = function (elem, options, callback) { + + var old = {}, + ret, name; + + // Remember the old values, and insert the new ones + for (name in options) { + old[name] = elem.style[name]; + elem.style[name] = options[name]; + } + + ret = callback.call(elem); + + // Revert the old values + for (name in options) { + elem.style[name] = old[name]; + } + + return ret; + }; + jQuery.text = function (elem) { + + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if (nodeType) { + if (nodeType === 1 || nodeType === 9 || nodeType === 11) { + // Use textContent || innerText for elements + if (typeof elem.textContent === 'string') { + return elem.textContent; + } else if (typeof elem.innerText === 'string') { + // Replace IE's carriage returns + return elem.innerText.replace(rReturn, ''); + } else { + // Traverse it's children + for (elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText(elem); + } + } + } else if (nodeType === 3 || nodeType === 4) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for (i = 0; (node = elem[i]) ; i++) { + // Do not traverse comment nodes + if (node.nodeType !== 8) { + ret += getText(node); + } + } + } + return ret; + }; + jQuery.trim = function (text) { + /// + /// Remove the whitespace from the beginning and end of a string. + /// + /// + /// The string to trim. + /// + /// + + return text == null ? + "" : + trim.call(text); + }; + jQuery.type = function (obj) { + /// + /// Determine the internal JavaScript [[Class]] of an object. + /// + /// + /// Object to get the internal JavaScript [[Class]] of. + /// + /// + + return obj == null ? + String(obj) : + class2type[toString.call(obj)] || "object"; + }; + jQuery.uaMatch = function (ua) { + + ua = ua.toLowerCase(); + + var match = rwebkit.exec(ua) || + ropera.exec(ua) || + rmsie.exec(ua) || + ua.indexOf("compatible") < 0 && rmozilla.exec(ua) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }; + jQuery.unique = function (results) { + /// + /// Sorts an array of DOM elements, in place, with the duplicates removed. Note that this only works on arrays of DOM elements, not strings or numbers. + /// + /// + /// The Array of DOM elements. + /// + /// + + if (sortOrder) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if (hasDuplicate) { + for (var i = 1; i < results.length; i++) { + if (results[i] === results[i - 1]) { + results.splice(i--, 1); + } + } + } + } + + return results; + }; + jQuery.uuid = 0; + jQuery.valHooks = { + "option": {}, + "select": {}, + "radio": {}, + "checkbox": {} + }; + jQuery.when = function (firstParam) { + /// + /// Provides a way to execute callback functions based on one or more objects, usually Deferred objects that represent asynchronous events. + /// + /// + /// One or more Deferred objects, or plain JavaScript objects. + /// + /// + + var args = sliceDeferred.call(arguments, 0), + i = 0, + length = args.length, + pValues = new Array(length), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction(firstParam.promise) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc(i) { + return function (value) { + args[i] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value; + if (!(--count)) { + deferred.resolveWith(deferred, args); + } + }; + } + function progressFunc(i) { + return function (value) { + pValues[i] = arguments.length > 1 ? sliceDeferred.call(arguments, 0) : value; + deferred.notifyWith(promise, pValues); + }; + } + if (length > 1) { + for (; i < length; i++) { + if (args[i] && args[i].promise && jQuery.isFunction(args[i].promise)) { + args[i].promise().then(resolveFunc(i), deferred.reject, progressFunc(i)); + } else { + --count; + } + } + if (!count) { + deferred.resolveWith(deferred, args); + } + } else if (deferred !== firstParam) { + deferred.resolveWith(deferred, length ? [firstParam] : []); + } + return promise; + }; + jQuery.Event.prototype.isDefaultPrevented = function returnFalse() { + /// + /// Returns whether event.preventDefault() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isImmediatePropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopImmediatePropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.isPropagationStopped = function returnFalse() { + /// + /// Returns whether event.stopPropagation() was ever called on this event object. + /// + /// + + return false; + }; + jQuery.Event.prototype.preventDefault = function () { + /// + /// If this method is called, the default action of the event will not be triggered. + /// + /// + + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + + // if preventDefault exists run it on the original event + if (e.preventDefault) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }; + jQuery.Event.prototype.stopImmediatePropagation = function () { + /// + /// Keeps the rest of the handlers from being executed and prevents the event from bubbling up the DOM tree. + /// + + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }; + jQuery.Event.prototype.stopPropagation = function () { + /// + /// Prevents the event from bubbling up the DOM tree, preventing any parent handlers from being notified of the event. + /// + + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if (!e) { + return; + } + // if stopPropagation exists run it on the original event + if (e.stopPropagation) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }; + jQuery.prototype._toggle = function (fn) { + + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function (event) { + // Figure out which function to execute + var lastToggle = (jQuery._data(this, "lastToggle" + fn.guid) || 0) % i; + jQuery._data(this, "lastToggle" + fn.guid, lastToggle + 1); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[lastToggle].apply(this, arguments) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while (i < args.length) { + args[i++].guid = guid; + } + + return this.click(toggler); + }; + jQuery.prototype.add = function (selector, context) { + /// + /// Add elements to the set of matched elements. + /// 1 - add(selector) + /// 2 - add(elements) + /// 3 - add(html) + /// 4 - add(jQuery object) + /// 5 - add(selector, context) + /// + /// + /// A string representing a selector expression to find additional elements to add to the set of matched elements. + /// + /// + /// The point in the document at which the selector should begin matching; similar to the context argument of the $(selector, context) method. + /// + /// + + var set = typeof selector === "string" ? + jQuery(selector, context) : + jQuery.makeArray(selector && selector.nodeType ? [selector] : selector), + all = jQuery.merge(this.get(), set); + + return this.pushStack(isDisconnected(set[0]) || isDisconnected(all[0]) ? + all : + jQuery.unique(all)); + }; + jQuery.prototype.addClass = function (value) { + /// + /// Adds the specified class(es) to each of the set of matched elements. + /// 1 - addClass(className) + /// 2 - addClass(function(index, currentClass)) + /// + /// + /// One or more class names to be added to the class attribute of each matched element. + /// + /// + + var classNames, i, l, elem, + setClass, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).addClass(value.call(this, j, this.className)); + }); + } + + if (value && typeof value === "string") { + classNames = value.split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1) { + if (!elem.className && classNames.length === 1) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for (c = 0, cl = classNames.length; c < cl; c++) { + if (!~setClass.indexOf(" " + classNames[c] + " ")) { + setClass += classNames[c] + " "; + } + } + elem.className = jQuery.trim(setClass); + } + } + } + } + + return this; + }; + jQuery.prototype.after = function () { + /// + /// Insert content, specified by the parameter, after each element in the set of matched elements. + /// 1 - after(content, content) + /// 2 - after(function(index)) + /// + /// + /// HTML string, DOM element, or jQuery object to insert after each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert after each element in the set of matched elements. + /// + /// + + if (this[0] && this[0].parentNode) { + return this.domManip(arguments, false, function (elem) { + this.parentNode.insertBefore(elem, this.nextSibling); + }); + } else if (arguments.length) { + var set = this.pushStack(this, "after", arguments); + set.push.apply(set, jQuery.clean(arguments)); + return set; + } + }; + jQuery.prototype.ajaxComplete = function (f) { + /// + /// Register a handler to be called when Ajax requests complete. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxError = function (f) { + /// + /// Register a handler to be called when Ajax requests complete with an error. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxSend = function (f) { + /// + /// Attach a function to be executed before an Ajax request is sent. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxStart = function (f) { + /// + /// Register a handler to be called when the first Ajax request begins. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxStop = function (f) { + /// + /// Register a handler to be called when all Ajax requests have completed. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.ajaxSuccess = function (f) { + /// + /// Attach a function to be executed whenever an Ajax request completes successfully. This is an Ajax Event. + /// + /// + /// The function to be invoked. + /// + /// + + return this.on(o, f); + }; + jQuery.prototype.andSelf = function () { + /// + /// Add the previous set of elements on the stack to the current set. + /// + /// + + return this.add(this.prevObject); + }; + jQuery.prototype.animate = function (prop, speed, easing, callback) { + /// + /// Perform a custom animation of a set of CSS properties. + /// 1 - animate(properties, duration, easing, complete) + /// 2 - animate(properties, options) + /// + /// + /// A map of CSS properties that the animation will move toward. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var optall = jQuery.speed(speed, easing, callback); + + if (jQuery.isEmptyObject(prop)) { + return this.each(optall.complete, [false]); + } + + // Do not change referenced properties as per-property easing will be lost + prop = jQuery.extend({}, prop); + + function doAnimation() { + // XXX 'this' does not always have a nodeName when running the + // test suite + + if (optall.queue === false) { + jQuery._mark(this); + } + + var opt = jQuery.extend({}, optall), + isElement = this.nodeType === 1, + hidden = isElement && jQuery(this).is(":hidden"), + name, val, p, e, hooks, replace, + parts, start, end, unit, + method; + + // will store per property easing and be used to determine when an animation is complete + opt.animatedProperties = {}; + + // first pass over propertys to expand / normalize + for (p in prop) { + name = jQuery.camelCase(p); + if (p !== name) { + prop[name] = prop[p]; + delete prop[p]; + } + + if ((hooks = jQuery.cssHooks[name]) && "expand" in hooks) { + replace = hooks.expand(prop[name]); + delete prop[name]; + + // not quite $.extend, this wont overwrite keys already present. + // also - reusing 'p' from above because we have the correct "name" + for (p in replace) { + if (!(p in prop)) { + prop[p] = replace[p]; + } + } + } + } + + for (name in prop) { + val = prop[name]; + // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default) + if (jQuery.isArray(val)) { + opt.animatedProperties[name] = val[1]; + val = prop[name] = val[0]; + } else { + opt.animatedProperties[name] = opt.specialEasing && opt.specialEasing[name] || opt.easing || 'swing'; + } + + if (val === "hide" && hidden || val === "show" && !hidden) { + return opt.complete.call(this); + } + + if (isElement && (name === "height" || name === "width")) { + // Make sure that nothing sneaks out + // Record all 3 overflow attributes because IE does not + // change the overflow attribute when overflowX and + // overflowY are set to the same value + opt.overflow = [this.style.overflow, this.style.overflowX, this.style.overflowY]; + + // Set display property to inline-block for height/width + // animations on inline elements that are having width/height animated + if (jQuery.css(this, "display") === "inline" && + jQuery.css(this, "float") === "none") { + + // inline-level elements accept inline-block; + // block-level elements need to be inline with layout + if (!jQuery.support.inlineBlockNeedsLayout || defaultDisplay(this.nodeName) === "inline") { + this.style.display = "inline-block"; + + } else { + this.style.zoom = 1; + } + } + } + } + + if (opt.overflow != null) { + this.style.overflow = "hidden"; + } + + for (p in prop) { + e = new jQuery.fx(this, opt, p); + val = prop[p]; + + if (rfxtypes.test(val)) { + + // Tracks whether to show or hide based on private + // data attached to the element + method = jQuery._data(this, "toggle" + p) || (val === "toggle" ? hidden ? "show" : "hide" : 0); + if (method) { + jQuery._data(this, "toggle" + p, method === "show" ? "hide" : "show"); + e[method](); + } else { + e[val](); + } + + } else { + parts = rfxnum.exec(val); + start = e.cur(); + + if (parts) { + end = parseFloat(parts[2]); + unit = parts[3] || (jQuery.cssNumber[p] ? "" : "px"); + + // We need to compute starting value + if (unit !== "px") { + jQuery.style(this, p, (end || 1) + unit); + start = ((end || 1) / e.cur()) * start; + jQuery.style(this, p, start + unit); + } + + // If a +=/-= token was provided, we're doing a relative animation + if (parts[1]) { + end = ((parts[1] === "-=" ? -1 : 1) * end) + start; + } + + e.custom(start, end, unit); + + } else { + e.custom(start, val, ""); + } + } + } + + // For JS strict compliance + return true; + } + + return optall.queue === false ? + this.each(doAnimation) : + this.queue(optall.queue, doAnimation); + }; + jQuery.prototype.append = function () { + /// + /// Insert content, specified by the parameter, to the end of each element in the set of matched elements. + /// 1 - append(content, content) + /// 2 - append(function(index, html)) + /// + /// + /// DOM element, HTML string, or jQuery object to insert at the end of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the end of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1) { + this.appendChild(elem); + } + }); + }; + jQuery.prototype.appendTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the end of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the end of the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.attr = function (name, value) { + /// + /// 1: Get the value of an attribute for the first element in the set of matched elements. + /// 1.1 - attr(attributeName) + /// 2: Set one or more attributes for the set of matched elements. + /// 2.1 - attr(attributeName, value) + /// 2.2 - attr(map) + /// 2.3 - attr(attributeName, function(index, attr)) + /// + /// + /// The name of the attribute to set. + /// + /// + /// A value to set for the attribute. + /// + /// + + return jQuery.access(this, jQuery.attr, name, value, arguments.length > 1); + }; + jQuery.prototype.before = function () { + /// + /// Insert content, specified by the parameter, before each element in the set of matched elements. + /// 1 - before(content, content) + /// 2 - before(function) + /// + /// + /// HTML string, DOM element, or jQuery object to insert before each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert before each element in the set of matched elements. + /// + /// + + if (this[0] && this[0].parentNode) { + return this.domManip(arguments, false, function (elem) { + this.parentNode.insertBefore(elem, this); + }); + } else if (arguments.length) { + var set = jQuery.clean(arguments); + set.push.apply(set, this.toArray()); + return this.pushStack(set, "before", arguments); + } + }; + jQuery.prototype.bind = function (types, data, fn) { + /// + /// Attach a handler to an event for the elements. + /// 1 - bind(eventType, eventData, handler(eventObject)) + /// 2 - bind(eventType, eventData, preventBubble) + /// 3 - bind(events) + /// + /// + /// A string containing one or more DOM event types, such as "click" or "submit," or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + return this.on(types, null, data, fn); + }; + jQuery.prototype.blur = function (data, fn) { + /// + /// Bind an event handler to the "blur" JavaScript event, or trigger that event on an element. + /// 1 - blur(handler(eventObject)) + /// 2 - blur(eventData, handler(eventObject)) + /// 3 - blur() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.change = function (data, fn) { + /// + /// Bind an event handler to the "change" JavaScript event, or trigger that event on an element. + /// 1 - change(handler(eventObject)) + /// 2 - change(eventData, handler(eventObject)) + /// 3 - change() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.children = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.clearQueue = function (type) { + /// + /// Remove from the queue all items that have not yet been run. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.queue(type || "fx", []); + }; + jQuery.prototype.click = function (data, fn) { + /// + /// Bind an event handler to the "click" JavaScript event, or trigger that event on an element. + /// 1 - click(handler(eventObject)) + /// 2 - click(eventData, handler(eventObject)) + /// 3 - click() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.clone = function (dataAndEvents, deepDataAndEvents) { + /// + /// Create a deep copy of the set of matched elements. + /// 1 - clone(withDataAndEvents) + /// 2 - clone(withDataAndEvents, deepWithDataAndEvents) + /// + /// + /// A Boolean indicating whether event handlers and data should be copied along with the elements. The default value is false. *In jQuery 1.5.0 the default value was incorrectly true; it was changed back to false in 1.5.1 and up. + /// + /// + /// A Boolean indicating whether event handlers and data for all children of the cloned element should be copied. By default its value matches the first argument's value (which defaults to false). + /// + /// + + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map(function () { + return jQuery.clone(this, dataAndEvents, deepDataAndEvents); + }); + }; + jQuery.prototype.closest = function (selectors, context) { + /// + /// 1: Get the first element that matches the selector, beginning at the current element and progressing up through the DOM tree. + /// 1.1 - closest(selector) + /// 1.2 - closest(selector, context) + /// 1.3 - closest(jQuery object) + /// 1.4 - closest(element) + /// 2: Gets an array of all the elements and selectors matched against the current element up through the DOM tree. + /// 2.1 - closest(selectors, context) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + /// A DOM element within which a matching element may be found. If no context is passed in then the context of the jQuery set will be used instead. + /// + /// + + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if (jQuery.isArray(selectors)) { + var level = 1; + + while (cur && cur.ownerDocument && cur !== context) { + for (i = 0; i < selectors.length; i++) { + + if (jQuery(cur).is(selectors[i])) { + ret.push({ selector: selectors[i], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test(selectors) || typeof selectors !== "string" ? + jQuery(selectors, context || this.context) : + 0; + + for (i = 0, l = this.length; i < l; i++) { + cur = this[i]; + + while (cur) { + if (pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors)) { + ret.push(cur); + break; + + } else { + cur = cur.parentNode; + if (!cur || !cur.ownerDocument || cur === context || cur.nodeType === 11) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique(ret) : ret; + + return this.pushStack(ret, "closest", selectors); + }; + jQuery.prototype.constructor = function (selector, context) { + + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init(selector, context, rootjQuery); + }; + jQuery.prototype.contents = function (until, selector) { + /// + /// Get the children of each element in the set of matched elements, including text and comment nodes. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.contextmenu = function (data, fn) { + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.css = function (name, value) { + /// + /// 1: Get the value of a style property for the first element in the set of matched elements. + /// 1.1 - css(propertyName) + /// 2: Set one or more CSS properties for the set of matched elements. + /// 2.1 - css(propertyName, value) + /// 2.2 - css(propertyName, function(index, value)) + /// 2.3 - css(map) + /// + /// + /// A CSS property name. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, function (elem, name, value) { + return value !== undefined ? + jQuery.style(elem, name, value) : + jQuery.css(elem, name); + }, name, value, arguments.length > 1); + }; + jQuery.prototype.data = function (key, value) { + /// + /// 1: Store arbitrary data associated with the matched elements. + /// 1.1 - data(key, value) + /// 1.2 - data(obj) + /// 2: Returns value at named data store for the first element in the jQuery collection, as set by data(name, value). + /// 2.1 - data(key) + /// 2.2 - data() + /// + /// + /// A string naming the piece of data to set. + /// + /// + /// The new data value; it can be any Javascript type including Array or Object. + /// + /// + + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if (key === undefined) { + if (this.length) { + data = jQuery.data(elem); + + if (elem.nodeType === 1 && !jQuery._data(elem, "parsedAttrs")) { + attr = elem.attributes; + for (l = attr.length; i < l; i++) { + name = attr[i].name; + + if (name.indexOf("data-") === 0) { + name = jQuery.camelCase(name.substring(5)); + + dataAttr(elem, name, data[name]); + } + } + jQuery._data(elem, "parsedAttrs", true); + } + } + + return data; + } + + // Sets multiple values + if (typeof key === "object") { + return this.each(function () { + jQuery.data(this, key); + }); + } + + parts = key.split(".", 2); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access(this, function (value) { + + if (value === undefined) { + data = this.triggerHandler("getData" + part, [parts[0]]); + + // Try to fetch any internally stored data first + if (data === undefined && elem) { + data = jQuery.data(elem, key); + data = dataAttr(elem, key, data); + } + + return data === undefined && parts[1] ? + this.data(parts[0]) : + data; + } + + parts[1] = value; + this.each(function () { + var self = jQuery(this); + + self.triggerHandler("setData" + part, parts); + jQuery.data(this, key, value); + self.triggerHandler("changeData" + part, parts); + }); + }, null, value, arguments.length > 1, null, false); + }; + jQuery.prototype.dblclick = function (data, fn) { + /// + /// Bind an event handler to the "dblclick" JavaScript event, or trigger that event on an element. + /// 1 - dblclick(handler(eventObject)) + /// 2 - dblclick(eventData, handler(eventObject)) + /// 3 - dblclick() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.delay = function (time, type) { + /// + /// Set a timer to delay execution of subsequent items in the queue. + /// + /// + /// An integer indicating the number of milliseconds to delay execution of the next item in the queue. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; + type = type || "fx"; + + return this.queue(type, function (next, hooks) { + var timeout = setTimeout(next, time); + hooks.stop = function () { + clearTimeout(timeout); + }; + }); + }; + jQuery.prototype.delegate = function (selector, types, data, fn) { + /// + /// Attach a handler to one or more events for all elements that match the selector, now or in the future, based on a specific set of root elements. + /// 1 - delegate(selector, eventType, handler(eventObject)) + /// 2 - delegate(selector, eventType, eventData, handler(eventObject)) + /// 3 - delegate(selector, events) + /// + /// + /// A selector to filter the elements that trigger the event. + /// + /// + /// A string containing one or more space-separated JavaScript event types, such as "click" or "keydown," or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + return this.on(types, selector, data, fn); + }; + jQuery.prototype.dequeue = function (type) { + /// + /// Execute the next function on the queue for the matched elements. + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + + return this.each(function () { + jQuery.dequeue(this, type); + }); + }; + jQuery.prototype.detach = function (selector) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + return this.remove(selector, true); + }; + jQuery.prototype.die = function (types, fn) { + /// + /// 1: Remove all event handlers previously attached using .live() from the elements. + /// 1.1 - die() + /// 2: Remove an event handler previously attached using .live() from the elements. + /// 2.1 - die(eventType, handler) + /// 2.2 - die(eventTypes) + /// + /// + /// A string containing a JavaScript event type, such as click or keydown. + /// + /// + /// The function that is no longer to be executed. + /// + /// + + jQuery(this.context).off(types, this.selector || "**", fn); + return this; + }; + jQuery.prototype.domManip = function (args, table, callback) { + + var results, first, fragment, parent, + value = args[0], + scripts = []; + + // We can't cloneNode fragments that contain checked, in WebKit + if (!jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test(value)) { + return this.each(function () { + jQuery(this).domManip(args, table, callback, true); + }); + } + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + var self = jQuery(this); + args[0] = value.call(this, i, table ? self.html() : undefined); + self.domManip(args, table, callback); + }); + } + + if (this[0]) { + parent = value && value.parentNode; + + // If we're in a fragment, just use that instead of building a new one + if (jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length) { + results = { fragment: parent }; + + } else { + results = jQuery.buildFragment(args, this, scripts); + } + + fragment = results.fragment; + + if (fragment.childNodes.length === 1) { + first = fragment = fragment.firstChild; + } else { + first = fragment.firstChild; + } + + if (first) { + table = table && jQuery.nodeName(first, "tr"); + + for (var i = 0, l = this.length, lastIndex = l - 1; i < l; i++) { + callback.call( + table ? + root(this[i], first) : + this[i], + // Make sure that we do not leak memory by inadvertently discarding + // the original fragment (which might have attached data) instead of + // using it; in addition, use the original fragment object for the last + // item instead of first because it can end up being emptied incorrectly + // in certain situations (Bug #8070). + // Fragments from the fragment cache must always be cloned and never used + // in place. + results.cacheable || (l > 1 && i < lastIndex) ? + jQuery.clone(fragment, true, true) : + fragment + ); + } + } + + if (scripts.length) { + jQuery.each(scripts, function (i, elem) { + if (elem.src) { + jQuery.ajax({ + type: "GET", + global: false, + url: elem.src, + async: false, + dataType: "script" + }); + } else { + jQuery.globalEval((elem.text || elem.textContent || elem.innerHTML || "").replace(rcleanScript, "/*$0*/")); + } + + if (elem.parentNode) { + elem.parentNode.removeChild(elem); + } + }); + } + } + + return this; + }; + jQuery.prototype.each = function (callback, args) { + /// + /// Iterate over a jQuery object, executing a function for each matched element. + /// + /// + /// A function to execute for each matched element. + /// + /// + + return jQuery.each(this, callback, args); + }; + jQuery.prototype.empty = function () { + /// + /// Remove all child nodes of the set of matched elements from the DOM. + /// + /// + + for (var i = 0, elem; (elem = this[i]) != null; i++) { + // Remove element nodes and prevent memory leaks + if (elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + } + + // Remove any remaining nodes + while (elem.firstChild) { + elem.removeChild(elem.firstChild); + } + } + + return this; + }; + jQuery.prototype.end = function () { + /// + /// End the most recent filtering operation in the current chain and return the set of matched elements to its previous state. + /// + /// + + return this.prevObject || this.constructor(null); + }; + jQuery.prototype.eq = function (i) { + /// + /// Reduce the set of matched elements to the one at the specified index. + /// 1 - eq(index) + /// 2 - eq(-index) + /// + /// + /// An integer indicating the 0-based position of the element. + /// + /// + + i = +i; + return i === -1 ? + this.slice(i) : + this.slice(i, i + 1); + }; + jQuery.prototype.error = function (data, fn) { + /// + /// Bind an event handler to the "error" JavaScript event. + /// 1 - error(handler(eventObject)) + /// 2 - error(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.extend = function () { + + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if (typeof target === "boolean") { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if (typeof target !== "object" && !jQuery.isFunction(target)) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if (length === i) { + target = this; + --i; + } + + for (; i < length; i++) { + // Only deal with non-null/undefined values + if ((options = arguments[i]) != null) { + // Extend the base object + for (name in options) { + src = target[name]; + copy = options[name]; + + // Prevent never-ending loop + if (target === copy) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { + if (copyIsArray) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[name] = jQuery.extend(deep, clone, copy); + + // Don't bring in undefined values + } else if (copy !== undefined) { + target[name] = copy; + } + } + } + } + + // Return the modified object + return target; + }; + jQuery.prototype.fadeIn = function (speed, easing, callback) { + /// + /// Display the matched elements by fading them to opaque. + /// 1 - fadeIn(duration, callback) + /// 2 - fadeIn(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeOut = function (speed, easing, callback) { + /// + /// Hide the matched elements by fading them to transparent. + /// 1 - fadeOut(duration, callback) + /// 2 - fadeOut(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.fadeTo = function (speed, to, easing, callback) { + /// + /// Adjust the opacity of the matched elements. + /// 1 - fadeTo(duration, opacity, callback) + /// 2 - fadeTo(duration, opacity, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A number between 0 and 1 denoting the target opacity. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.filter(":hidden").css("opacity", 0).show().end() + .animate({ opacity: to }, speed, easing, callback); + }; + jQuery.prototype.fadeToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements by animating their opacity. + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.filter = function (selector) { + /// + /// Reduce the set of matched elements to those that match the selector or pass the function's test. + /// 1 - filter(selector) + /// 2 - filter(function(index)) + /// 3 - filter(element) + /// 4 - filter(jQuery object) + /// + /// + /// A string containing a selector expression to match the current set of elements against. + /// + /// + + return this.pushStack(winnow(this, selector, true), "filter", selector); + }; + jQuery.prototype.find = function (selector) { + /// + /// Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element. + /// 1 - find(selector) + /// 2 - find(jQuery object) + /// 3 - find(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var self = this, + i, l; + + if (typeof selector !== "string") { + return jQuery(selector).filter(function () { + for (i = 0, l = self.length; i < l; i++) { + if (jQuery.contains(self[i], this)) { + return true; + } + } + }); + } + + var ret = this.pushStack("", "find", selector), + length, n, r; + + for (i = 0, l = this.length; i < l; i++) { + length = ret.length; + jQuery.find(selector, this[i], ret); + + if (i > 0) { + // Make sure that the results are unique + for (n = length; n < ret.length; n++) { + for (r = 0; r < length; r++) { + if (ret[r] === ret[n]) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }; + jQuery.prototype.first = function () { + /// + /// Reduce the set of matched elements to the first in the set. + /// + /// + + return this.eq(0); + }; + jQuery.prototype.focus = function (data, fn) { + /// + /// Bind an event handler to the "focus" JavaScript event, or trigger that event on an element. + /// 1 - focus(handler(eventObject)) + /// 2 - focus(eventData, handler(eventObject)) + /// 3 - focus() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusin = function (data, fn) { + /// + /// Bind an event handler to the "focusin" event. + /// 1 - focusin(handler(eventObject)) + /// 2 - focusin(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.focusout = function (data, fn) { + /// + /// Bind an event handler to the "focusout" JavaScript event. + /// 1 - focusout(handler(eventObject)) + /// 2 - focusout(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.get = function (num) { + /// + /// Retrieve the DOM elements matched by the jQuery object. + /// + /// + /// A zero-based integer indicating which element to retrieve. + /// + /// + + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + (num < 0 ? this[this.length + num] : this[num]); + }; + jQuery.prototype.has = function (target) { + /// + /// Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element. + /// 1 - has(selector) + /// 2 - has(contained) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var targets = jQuery(target); + return this.filter(function () { + for (var i = 0, l = targets.length; i < l; i++) { + if (jQuery.contains(this, targets[i])) { + return true; + } + } + }); + }; + jQuery.prototype.hasClass = function (selector) { + /// + /// Determine whether any of the matched elements are assigned the given class. + /// + /// + /// The class name to search for. + /// + /// + + var className = " " + selector + " ", + i = 0, + l = this.length; + for (; i < l; i++) { + if (this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf(className) > -1) { + return true; + } + } + + return false; + }; + jQuery.prototype.height = function (value) { + /// + /// 1: Get the current computed height for the first element in the set of matched elements. + /// 1.1 - height() + /// 2: Set the CSS height of every matched element. + /// 2.1 - height(value) + /// 2.2 - height(function(index, height)) + /// + /// + /// An integer representing the number of pixels, or an integer with an optional unit of measure appended (as a string). + /// + /// + + return jQuery.access(this, function (elem, type, value) { + var doc, docElemProp, orig, ret; + + if (jQuery.isWindow(elem)) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[clientProp]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[clientProp] || docElemProp; + } + + // Get document width or height + if (elem.nodeType === 9) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if (doc[clientProp] >= doc[scrollProp]) { + return doc[clientProp]; + } + + return Math.max( + elem.body[scrollProp], doc[scrollProp], + elem.body[offsetProp], doc[offsetProp] + ); + } + + // Get width or height on the element + if (value === undefined) { + orig = jQuery.css(elem, type); + ret = parseFloat(orig); + return jQuery.isNumeric(ret) ? ret : orig; + } + + // Set the width or height on the element + jQuery(elem).css(type, value); + }, type, value, arguments.length, null); + }; + jQuery.prototype.hide = function (speed, easing, callback) { + /// + /// Hide the matched elements. + /// 1 - hide() + /// 2 - hide(duration, callback) + /// 3 - hide(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + if (speed || speed === 0) { + return this.animate(genFx("hide", 3), speed, easing, callback); + + } else { + var elem, display, + i = 0, + j = this.length; + + for (; i < j; i++) { + elem = this[i]; + if (elem.style) { + display = jQuery.css(elem, "display"); + + if (display !== "none" && !jQuery._data(elem, "olddisplay")) { + jQuery._data(elem, "olddisplay", display); + } + } + } + + // Set the display of the elements in a second loop + // to avoid the constant reflow + for (i = 0; i < j; i++) { + if (this[i].style) { + this[i].style.display = "none"; + } + } + + return this; + } + }; + jQuery.prototype.hover = function (fnOver, fnOut) { + /// + /// 1: Bind two handlers to the matched elements, to be executed when the mouse pointer enters and leaves the elements. + /// 1.1 - hover(handlerIn(eventObject), handlerOut(eventObject)) + /// 2: Bind a single handler to the matched elements, to be executed when the mouse pointer enters or leaves the elements. + /// 2.1 - hover(handlerInOut(eventObject)) + /// + /// + /// A function to execute when the mouse pointer enters the element. + /// + /// + /// A function to execute when the mouse pointer leaves the element. + /// + /// + + return this.mouseenter(fnOver).mouseleave(fnOut || fnOver); + }; + jQuery.prototype.html = function (value) { + /// + /// 1: Get the HTML contents of the first element in the set of matched elements. + /// 1.1 - html() + /// 2: Set the HTML contents of each element in the set of matched elements. + /// 2.1 - html(htmlString) + /// 2.2 - html(function(index, oldhtml)) + /// + /// + /// A string of HTML to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if (value === undefined) { + return elem.nodeType === 1 ? + elem.innerHTML.replace(rinlinejQuery, "") : + null; + } + + + if (typeof value === "string" && !rnoInnerhtml.test(value) && + (jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value)) && + !wrapMap[(rtagName.exec(value) || ["", ""])[1].toLowerCase()]) { + + value = value.replace(rxhtmlTag, "<$1>"); + + try { + for (; i < l; i++) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if (elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch (e) { } + } + + if (elem) { + this.empty().append(value); + } + }, null, value, arguments.length); + }; + jQuery.prototype.index = function (elem) { + /// + /// Search for a given element from among the matched elements. + /// 1 - index() + /// 2 - index(selector) + /// 3 - index(element) + /// + /// + /// A selector representing a jQuery collection in which to look for an element. + /// + /// + + + // No argument, return index in parent + if (!elem) { + return (this[0] && this[0].parentNode) ? this.prevAll().length : -1; + } + + // index in selector + if (typeof elem === "string") { + return jQuery.inArray(this[0], jQuery(elem)); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this); + }; + jQuery.prototype.init = function (selector, context, rootjQuery) { + + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if (!selector) { + return this; + } + + // Handle $(DOMElement) + if (selector.nodeType) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if (selector === "body" && !context && document.body) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if (typeof selector === "string") { + // Are we dealing with HTML string or an ID? + if (selector.charAt(0) === "<" && selector.charAt(selector.length - 1) === ">" && selector.length >= 3) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [null, selector, null]; + + } else { + match = quickExpr.exec(selector); + } + + // Verify a match, and that no context was specified for #id + if (match && (match[1] || !context)) { + + // HANDLE: $(html) -> $(array) + if (match[1]) { + context = context instanceof jQuery ? context[0] : context; + doc = (context ? context.ownerDocument || context : document); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec(selector); + + if (ret) { + if (jQuery.isPlainObject(context)) { + selector = [document.createElement(ret[1])]; + jQuery.fn.attr.call(selector, context, true); + + } else { + selector = [doc.createElement(ret[1])]; + } + + } else { + ret = jQuery.buildFragment([match[1]], [doc]); + selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes; + } + + return jQuery.merge(this, selector); + + // HANDLE: $("#id") + } else { + elem = document.getElementById(match[2]); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if (elem && elem.parentNode) { + // Handle the case where IE and Opera return items + // by name instead of ID + if (elem.id !== match[2]) { + return rootjQuery.find(selector); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if (!context || context.jquery) { + return (context || rootjQuery).find(selector); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor(context).find(selector); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if (jQuery.isFunction(selector)) { + return rootjQuery.ready(selector); + } + + if (selector.selector !== undefined) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray(selector, this); + }; + jQuery.prototype.innerHeight = function () { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding but not border. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, "padding")) : + this[type]() : + null; + }; + jQuery.prototype.innerWidth = function () { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding but not border. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, "padding")) : + this[type]() : + null; + }; + jQuery.prototype.insertAfter = function (selector) { + /// + /// Insert every element in the set of matched elements after the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted after the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.insertBefore = function (selector) { + /// + /// Insert every element in the set of matched elements before the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted before the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.is = function (selector) { + /// + /// Check the current matched set of elements against a selector, element, or jQuery object and return true if at least one of these elements matches the given arguments. + /// 1 - is(selector) + /// 2 - is(function(index)) + /// 3 - is(jQuery object) + /// 4 - is(element) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test(selector) ? + jQuery(selector, this.context).index(this[0]) >= 0 : + jQuery.filter(selector, this).length > 0 : + this.filter(selector).length > 0); + }; + jQuery.prototype.keydown = function (data, fn) { + /// + /// Bind an event handler to the "keydown" JavaScript event, or trigger that event on an element. + /// 1 - keydown(handler(eventObject)) + /// 2 - keydown(eventData, handler(eventObject)) + /// 3 - keydown() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keypress = function (data, fn) { + /// + /// Bind an event handler to the "keypress" JavaScript event, or trigger that event on an element. + /// 1 - keypress(handler(eventObject)) + /// 2 - keypress(eventData, handler(eventObject)) + /// 3 - keypress() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.keyup = function (data, fn) { + /// + /// Bind an event handler to the "keyup" JavaScript event, or trigger that event on an element. + /// 1 - keyup(handler(eventObject)) + /// 2 - keyup(eventData, handler(eventObject)) + /// 3 - keyup() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.last = function () { + /// + /// Reduce the set of matched elements to the final one in the set. + /// + /// + + return this.eq(-1); + }; + jQuery.prototype.length = 0; + jQuery.prototype.live = function (types, data, fn) { + /// + /// Attach an event handler for all elements which match the current selector, now and in the future. + /// 1 - live(events, handler(eventObject)) + /// 2 - live(events, data, handler(eventObject)) + /// 3 - live(events-map) + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown." As of jQuery 1.4 the string can contain multiple, space-separated event types or custom event names. + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + jQuery(this.context).on(types, this.selector, data, fn); + return this; + }; + jQuery.prototype.load = function (url, params, callback) { + /// + /// 1: Bind an event handler to the "load" JavaScript event. + /// 1.1 - load(handler(eventObject)) + /// 1.2 - load(eventData, handler(eventObject)) + /// 2: Load data from the server and place the returned HTML into the matched element. + /// 2.1 - load(url, data, complete(responseText, textStatus, XMLHttpRequest)) + /// + /// + /// A string containing the URL to which the request is sent. + /// + /// + /// A map or string that is sent to the server with the request. + /// + /// + /// A callback function that is executed when the request completes. + /// + /// + + if (typeof url !== "string" && _load) { + return _load.apply(this, arguments); + + // Don't do a request if no elements are being requested + } else if (!this.length) { + return this; + } + + var off = url.indexOf(" "); + if (off >= 0) { + var selector = url.slice(off, url.length); + url = url.slice(0, off); + } + + // Default to a GET request + var type = "GET"; + + // If the second parameter was provided + if (params) { + // If it's a function + if (jQuery.isFunction(params)) { + // We assume that it's the callback + callback = params; + params = undefined; + + // Otherwise, build a param string + } else if (typeof params === "object") { + params = jQuery.param(params, jQuery.ajaxSettings.traditional); + type = "POST"; + } + } + + var self = this; + + // Request the remote document + jQuery.ajax({ + url: url, + type: type, + dataType: "html", + data: params, + // Complete callback (responseText is used internally) + complete: function (jqXHR, status, responseText) { + // Store the response as specified by the jqXHR object + responseText = jqXHR.responseText; + // If successful, inject the HTML into all the matched elements + if (jqXHR.isResolved()) { + // #4825: Get the actual response in case + // a dataFilter is present in ajaxSettings + jqXHR.done(function (r) { + responseText = r; + }); + // See if a selector was specified + self.html(selector ? + // Create a dummy div to hold the results + jQuery("
") + // inject the contents of the document in, removing the scripts + // to avoid any 'Permission Denied' errors in IE + .append(responseText.replace(rscript, "")) + + // Locate the specified elements + .find(selector) : + + // If not, just inject the full result + responseText); + } + + if (callback) { + self.each(callback, [responseText, status, jqXHR]); + } + } + }); + + return this; + }; + jQuery.prototype.map = function (callback) { + /// + /// Pass each element in the current matched set through a function, producing a new jQuery object containing the return values. + /// + /// + /// A function object that will be invoked for each element in the current set. + /// + /// + + return this.pushStack(jQuery.map(this, function (elem, i) { + return callback.call(elem, i, elem); + })); + }; + jQuery.prototype.mousedown = function (data, fn) { + /// + /// Bind an event handler to the "mousedown" JavaScript event, or trigger that event on an element. + /// 1 - mousedown(handler(eventObject)) + /// 2 - mousedown(eventData, handler(eventObject)) + /// 3 - mousedown() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseenter = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse enters an element, or trigger that handler on an element. + /// 1 - mouseenter(handler(eventObject)) + /// 2 - mouseenter(eventData, handler(eventObject)) + /// 3 - mouseenter() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseleave = function (data, fn) { + /// + /// Bind an event handler to be fired when the mouse leaves an element, or trigger that handler on an element. + /// 1 - mouseleave(handler(eventObject)) + /// 2 - mouseleave(eventData, handler(eventObject)) + /// 3 - mouseleave() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mousemove = function (data, fn) { + /// + /// Bind an event handler to the "mousemove" JavaScript event, or trigger that event on an element. + /// 1 - mousemove(handler(eventObject)) + /// 2 - mousemove(eventData, handler(eventObject)) + /// 3 - mousemove() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseout = function (data, fn) { + /// + /// Bind an event handler to the "mouseout" JavaScript event, or trigger that event on an element. + /// 1 - mouseout(handler(eventObject)) + /// 2 - mouseout(eventData, handler(eventObject)) + /// 3 - mouseout() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseover = function (data, fn) { + /// + /// Bind an event handler to the "mouseover" JavaScript event, or trigger that event on an element. + /// 1 - mouseover(handler(eventObject)) + /// 2 - mouseover(eventData, handler(eventObject)) + /// 3 - mouseover() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.mouseup = function (data, fn) { + /// + /// Bind an event handler to the "mouseup" JavaScript event, or trigger that event on an element. + /// 1 - mouseup(handler(eventObject)) + /// 2 - mouseup(eventData, handler(eventObject)) + /// 3 - mouseup() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.next = function (until, selector) { + /// + /// Get the immediately following sibling of each element in the set of matched elements. If a selector is provided, it retrieves the next sibling only if it matches that selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.nextAll = function (until, selector) { + /// + /// Get all following siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.nextUntil = function (until, selector) { + /// + /// Get all following siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object passed. + /// 1 - nextUntil(selector, filter) + /// 2 - nextUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching following sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.not = function (selector) { + /// + /// Remove elements from the set of matched elements. + /// 1 - not(selector) + /// 2 - not(elements) + /// 3 - not(function(index)) + /// 4 - not(jQuery object) + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + return this.pushStack(winnow(this, selector, false), "not", selector); + }; + jQuery.prototype.off = function (types, selector, fn) { + /// + /// Remove an event handler. + /// 1 - off(events, selector, handler(eventObject)) + /// 2 - off(events-map, selector) + /// + /// + /// One or more space-separated event types and optional namespaces, or just namespaces, such as "click", "keydown.myPlugin", or ".myPlugin". + /// + /// + /// A selector which should match the one originally passed to .on() when attaching event handlers. + /// + /// + /// A handler function previously attached for the event(s), or the special value false. + /// + /// + + if (types && types.preventDefault && types.handleObj) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery(types.delegateTarget).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if (typeof types === "object") { + // ( types-object [, selector] ) + for (var type in types) { + this.off(type, selector, types[type]); + } + return this; + } + if (selector === false || typeof selector === "function") { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if (fn === false) { + fn = returnFalse; + } + return this.each(function () { + jQuery.event.remove(this, types, fn, selector); + }); + }; + jQuery.prototype.offset = function (options) { + /// + /// 1: Get the current coordinates of the first element in the set of matched elements, relative to the document. + /// 1.1 - offset() + /// 2: Set the current coordinates of every element in the set of matched elements, relative to the document. + /// 2.1 - offset(coordinates) + /// 2.2 - offset(function(index, coords)) + /// + /// + /// An object containing the properties top and left, which are integers indicating the new top and left coordinates for the elements. + /// + /// + + if (arguments.length) { + return options === undefined ? + this : + this.each(function (i) { + jQuery.offset.setOffset(this, options, i); + }); + } + + var elem = this[0], + doc = elem && elem.ownerDocument; + + if (!doc) { + return null; + } + + if (elem === doc.body) { + return jQuery.offset.bodyOffset(elem); + } + + return getOffset(elem, doc, doc.documentElement); + }; + jQuery.prototype.offsetParent = function () { + /// + /// Get the closest ancestor element that is positioned. + /// + /// + + return this.map(function () { + var offsetParent = this.offsetParent || document.body; + while (offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static")) { + offsetParent = offsetParent.offsetParent; + } + return offsetParent; + }); + }; + jQuery.prototype.on = function (types, selector, data, fn, /*INTERNAL*/ one) { + /// + /// Attach an event handler function for one or more events to the selected elements. + /// 1 - on(events, selector, data, handler(eventObject)) + /// 2 - on(events-map, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + var origFn, type; + + // Types can be a map of types/handlers + if (typeof types === "object") { + // ( types-Object, selector, data ) + if (typeof selector !== "string") { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for (type in types) { + this.on(type, selector, data, types[type], one); + } + return this; + } + + if (data == null && fn == null) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if (fn == null) { + if (typeof selector === "string") { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if (fn === false) { + fn = returnFalse; + } else if (!fn) { + return this; + } + + if (one === 1) { + origFn = fn; + fn = function (event) { + // Can use an empty set, since event contains the info + jQuery().off(event); + return origFn.apply(this, arguments); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || (origFn.guid = jQuery.guid++); + } + return this.each(function () { + jQuery.event.add(this, types, fn, data, selector); + }); + }; + jQuery.prototype.one = function (types, selector, data, fn) { + /// + /// Attach a handler to an event for the elements. The handler is executed at most once per element. + /// 1 - one(events, data, handler(eventObject)) + /// 2 - one(events, selector, data, handler(eventObject)) + /// 3 - one(events-map, selector, data) + /// + /// + /// One or more space-separated event types and optional namespaces, such as "click" or "keydown.myPlugin". + /// + /// + /// A selector string to filter the descendants of the selected elements that trigger the event. If the selector is null or omitted, the event is always triggered when it reaches the selected element. + /// + /// + /// Data to be passed to the handler in event.data when an event is triggered. + /// + /// + /// A function to execute when the event is triggered. The value false is also allowed as a shorthand for a function that simply does return false. + /// + /// + + return this.on(types, selector, data, fn, 1); + }; + jQuery.prototype.outerHeight = function (margin) { + /// + /// Get the current computed height for the first element in the set of matched elements, including padding, border, and optionally margin. Returns an integer (without "px") representation of the value or null if called on an empty set of elements. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, margin ? "margin" : "border")) : + this[type]() : + null; + }; + jQuery.prototype.outerWidth = function (margin) { + /// + /// Get the current computed width for the first element in the set of matched elements, including padding and border. + /// + /// + /// A Boolean indicating whether to include the element's margin in the calculation. + /// + /// + + var elem = this[0]; + return elem ? + elem.style ? + parseFloat(jQuery.css(elem, type, margin ? "margin" : "border")) : + this[type]() : + null; + }; + jQuery.prototype.parent = function (until, selector) { + /// + /// Get the parent of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.parents = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.parentsUntil = function (until, selector) { + /// + /// Get the ancestors of each element in the current set of matched elements, up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - parentsUntil(selector, filter) + /// 2 - parentsUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching ancestor elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.position = function () { + /// + /// Get the current coordinates of the first element in the set of matched elements, relative to the offset parent. + /// + /// + + if (!this[0]) { + return null; + } + + var elem = this[0], + + // Get *real* offsetParent + offsetParent = this.offsetParent(), + + // Get correct offsets + offset = this.offset(), + parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset(); + + // Subtract element margins + // note: when an element has margin: auto the offsetLeft and marginLeft + // are the same in Safari causing offset.left to incorrectly be 0 + offset.top -= parseFloat(jQuery.css(elem, "marginTop")) || 0; + offset.left -= parseFloat(jQuery.css(elem, "marginLeft")) || 0; + + // Add offsetParent borders + parentOffset.top += parseFloat(jQuery.css(offsetParent[0], "borderTopWidth")) || 0; + parentOffset.left += parseFloat(jQuery.css(offsetParent[0], "borderLeftWidth")) || 0; + + // Subtract the two offsets + return { + top: offset.top - parentOffset.top, + left: offset.left - parentOffset.left + }; + }; + jQuery.prototype.prepend = function () { + /// + /// Insert content, specified by the parameter, to the beginning of each element in the set of matched elements. + /// 1 - prepend(content, content) + /// 2 - prepend(function(index, html)) + /// + /// + /// DOM element, array of elements, HTML string, or jQuery object to insert at the beginning of each element in the set of matched elements. + /// + /// + /// One or more additional DOM elements, arrays of elements, HTML strings, or jQuery objects to insert at the beginning of each element in the set of matched elements. + /// + /// + + return this.domManip(arguments, true, function (elem) { + if (this.nodeType === 1) { + this.insertBefore(elem, this.firstChild); + } + }); + }; + jQuery.prototype.prependTo = function (selector) { + /// + /// Insert every element in the set of matched elements to the beginning of the target. + /// + /// + /// A selector, element, HTML string, or jQuery object; the matched set of elements will be inserted at the beginning of the element(s) specified by this parameter. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.prev = function (until, selector) { + /// + /// Get the immediately preceding sibling of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.prevAll = function (until, selector) { + /// + /// Get all preceding siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.prevUntil = function (until, selector) { + /// + /// Get all preceding siblings of each element up to but not including the element matched by the selector, DOM node, or jQuery object. + /// 1 - prevUntil(selector, filter) + /// 2 - prevUntil(element, filter) + /// + /// + /// A string containing a selector expression to indicate where to stop matching preceding sibling elements. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.promise = function (type, object) { + /// + /// Return a Promise object to observe when all actions of a certain type bound to the collection, queued or not, have finished. + /// + /// + /// The type of queue that needs to be observed. + /// + /// + /// Object onto which the promise methods have to be attached + /// + /// + + if (typeof type !== "string") { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if (!(--count)) { + defer.resolveWith(elements, [elements]); + } + } + while (i--) { + if ((tmp = jQuery.data(elements[i], deferDataKey, undefined, true) || + (jQuery.data(elements[i], queueDataKey, undefined, true) || + jQuery.data(elements[i], markDataKey, undefined, true)) && + jQuery.data(elements[i], deferDataKey, jQuery.Callbacks("once memory"), true))) { + count++; + tmp.add(resolve); + } + } + resolve(); + return defer.promise(object); + }; + jQuery.prototype.prop = function (name, value) { + /// + /// 1: Get the value of a property for the first element in the set of matched elements. + /// 1.1 - prop(propertyName) + /// 2: Set one or more properties for the set of matched elements. + /// 2.1 - prop(propertyName, value) + /// 2.2 - prop(map) + /// 2.3 - prop(propertyName, function(index, oldPropertyValue)) + /// + /// + /// The name of the property to set. + /// + /// + /// A value to set for the property. + /// + /// + + return jQuery.access(this, jQuery.prop, name, value, arguments.length > 1); + }; + jQuery.prototype.pushStack = function (elems, name, selector) { + /// + /// Add a collection of DOM elements onto the jQuery stack. + /// 1 - pushStack(elements) + /// 2 - pushStack(elements, name, arguments) + /// + /// + /// An array of elements to push onto the stack and make into a new jQuery object. + /// + /// + /// The name of a jQuery method that generated the array of elements. + /// + /// + /// The arguments that were passed in to the jQuery method (for serialization). + /// + /// + + // Build a new jQuery matched element set + var ret = this.constructor(); + + if (jQuery.isArray(elems)) { + push.apply(ret, elems); + + } else { + jQuery.merge(ret, elems); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if (name === "find") { + ret.selector = this.selector + (this.selector ? " " : "") + selector; + } else if (name) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }; + jQuery.prototype.queue = function (type, data) { + /// + /// 1: Show the queue of functions to be executed on the matched elements. + /// 1.1 - queue(queueName) + /// 2: Manipulate the queue of functions to be executed on the matched elements. + /// 2.1 - queue(queueName, newQueue) + /// 2.2 - queue(queueName, callback( next )) + /// + /// + /// A string containing the name of the queue. Defaults to fx, the standard effects queue. + /// + /// + /// An array of functions to replace the current queue contents. + /// + /// + + var setter = 2; + + if (typeof type !== "string") { + data = type; + type = "fx"; + setter--; + } + + if (arguments.length < setter) { + return jQuery.queue(this[0], type); + } + + return data === undefined ? + this : + this.each(function () { + var queue = jQuery.queue(this, type, data); + + if (type === "fx" && queue[0] !== "inprogress") { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.ready = function (fn) { + /// + /// Specify a function to execute when the DOM is fully loaded. + /// + /// + /// A function to execute after the DOM is ready. + /// + /// + + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add(fn); + + return this; + }; + jQuery.prototype.remove = function (selector, keepData) { + /// + /// Remove the set of matched elements from the DOM. + /// + /// + /// A selector expression that filters the set of matched elements to be removed. + /// + /// + + for (var i = 0, elem; (elem = this[i]) != null; i++) { + if (!selector || jQuery.filter(selector, [elem]).length) { + if (!keepData && elem.nodeType === 1) { + jQuery.cleanData(elem.getElementsByTagName("*")); + jQuery.cleanData([elem]); + } + + if (elem.parentNode) { + elem.parentNode.removeChild(elem); + } + } + } + + return this; + }; + jQuery.prototype.removeAttr = function (name) { + /// + /// Remove an attribute from each element in the set of matched elements. + /// + /// + /// An attribute to remove; as of version 1.7, it can be a space-separated list of attributes. + /// + /// + + return this.each(function () { + jQuery.removeAttr(this, name); + }); + }; + jQuery.prototype.removeClass = function (value) { + /// + /// Remove a single class, multiple classes, or all classes from each element in the set of matched elements. + /// 1 - removeClass(className) + /// 2 - removeClass(function(index, class)) + /// + /// + /// One or more space-separated classes to be removed from the class attribute of each matched element. + /// + /// + + var classNames, i, l, elem, className, c, cl; + + if (jQuery.isFunction(value)) { + return this.each(function (j) { + jQuery(this).removeClass(value.call(this, j, this.className)); + }); + } + + if ((value && typeof value === "string") || value === undefined) { + classNames = (value || "").split(rspace); + + for (i = 0, l = this.length; i < l; i++) { + elem = this[i]; + + if (elem.nodeType === 1 && elem.className) { + if (value) { + className = (" " + elem.className + " ").replace(rclass, " "); + for (c = 0, cl = classNames.length; c < cl; c++) { + className = className.replace(" " + classNames[c] + " ", " "); + } + elem.className = jQuery.trim(className); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }; + jQuery.prototype.removeData = function (key) { + /// + /// Remove a previously-stored piece of data. + /// 1 - removeData(name) + /// 2 - removeData(list) + /// + /// + /// A string naming the piece of data to delete. + /// + /// + + return this.each(function () { + jQuery.removeData(this, key); + }); + }; + jQuery.prototype.removeProp = function (name) { + /// + /// Remove a property for the set of matched elements. + /// + /// + /// The name of the property to set. + /// + /// + + name = jQuery.propFix[name] || name; + return this.each(function () { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[name] = undefined; + delete this[name]; + } catch (e) { } + }); + }; + jQuery.prototype.replaceAll = function (selector) { + /// + /// Replace each target element with the set of matched elements. + /// + /// + /// A selector expression indicating which element(s) to replace. + /// + /// + + var ret = [], + insert = jQuery(selector), + parent = this.length === 1 && this[0].parentNode; + + if (parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1) { + insert[original](this[0]); + return this; + + } else { + for (var i = 0, l = insert.length; i < l; i++) { + var elems = (i > 0 ? this.clone(true) : this).get(); + jQuery(insert[i])[original](elems); + ret = ret.concat(elems); + } + + return this.pushStack(ret, name, insert.selector); + } + }; + jQuery.prototype.replaceWith = function (value) { + /// + /// Replace each element in the set of matched elements with the provided new content. + /// 1 - replaceWith(newContent) + /// 2 - replaceWith(function) + /// + /// + /// The content to insert. May be an HTML string, DOM element, or jQuery object. + /// + /// + + if (this[0] && this[0].parentNode) { + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if (jQuery.isFunction(value)) { + return this.each(function (i) { + var self = jQuery(this), old = self.html(); + self.replaceWith(value.call(this, i, old)); + }); + } + + if (typeof value !== "string") { + value = jQuery(value).detach(); + } + + return this.each(function () { + var next = this.nextSibling, + parent = this.parentNode; + + jQuery(this).remove(); + + if (next) { + jQuery(next).before(value); + } else { + jQuery(parent).append(value); + } + }); + } else { + return this.length ? + this.pushStack(jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value) : + this; + } + }; + jQuery.prototype.resize = function (data, fn) { + /// + /// Bind an event handler to the "resize" JavaScript event, or trigger that event on an element. + /// 1 - resize(handler(eventObject)) + /// 2 - resize(eventData, handler(eventObject)) + /// 3 - resize() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scroll = function (data, fn) { + /// + /// Bind an event handler to the "scroll" JavaScript event, or trigger that event on an element. + /// 1 - scroll(handler(eventObject)) + /// 2 - scroll(eventData, handler(eventObject)) + /// 3 - scroll() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.scrollLeft = function (val) { + /// + /// 1: Get the current horizontal position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollLeft() + /// 2: Set the current horizontal position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollLeft(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + jQuery.support.boxModel && win.document.documentElement[method] || + win.document.body[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.scrollTop = function (val) { + /// + /// 1: Get the current vertical position of the scroll bar for the first element in the set of matched elements. + /// 1.1 - scrollTop() + /// 2: Set the current vertical position of the scroll bar for each of the set of matched elements. + /// 2.1 - scrollTop(value) + /// + /// + /// An integer indicating the new position to set the scroll bar to. + /// + /// + + return jQuery.access(this, function (elem, method, val) { + var win = getWindow(elem); + + if (val === undefined) { + return win ? (prop in win) ? win[prop] : + jQuery.support.boxModel && win.document.documentElement[method] || + win.document.body[method] : + elem[method]; + } + + if (win) { + win.scrollTo( + !top ? val : jQuery(win).scrollLeft(), + top ? val : jQuery(win).scrollTop() + ); + + } else { + elem[method] = val; + } + }, method, val, arguments.length, null); + }; + jQuery.prototype.select = function (data, fn) { + /// + /// Bind an event handler to the "select" JavaScript event, or trigger that event on an element. + /// 1 - select(handler(eventObject)) + /// 2 - select(eventData, handler(eventObject)) + /// 3 - select() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.serialize = function () { + /// + /// Encode a set of form elements as a string for submission. + /// + /// + + return jQuery.param(this.serializeArray()); + }; + jQuery.prototype.serializeArray = function () { + /// + /// Encode a set of form elements as an array of names and values. + /// + /// + + return this.map(function () { + return this.elements ? jQuery.makeArray(this.elements) : this; + }) + .filter(function () { + return this.name && !this.disabled && + (this.checked || rselectTextarea.test(this.nodeName) || + rinput.test(this.type)); + }) + .map(function (i, elem) { + var val = jQuery(this).val(); + + return val == null ? + null : + jQuery.isArray(val) ? + jQuery.map(val, function (val, i) { + return { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }) : + { name: elem.name, value: val.replace(rCRLF, "\r\n") }; + }).get(); + }; + jQuery.prototype.show = function (speed, easing, callback) { + /// + /// Display the matched elements. + /// 1 - show() + /// 2 - show(duration, callback) + /// 3 - show(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + var elem, display; + + if (speed || speed === 0) { + return this.animate(genFx("show", 3), speed, easing, callback); + + } else { + for (var i = 0, j = this.length; i < j; i++) { + elem = this[i]; + + if (elem.style) { + display = elem.style.display; + + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if (!jQuery._data(elem, "olddisplay") && display === "none") { + display = elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ((display === "" && jQuery.css(elem, "display") === "none") || + !jQuery.contains(elem.ownerDocument.documentElement, elem)) { + jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName)); + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for (i = 0; i < j; i++) { + elem = this[i]; + + if (elem.style) { + display = elem.style.display; + + if (display === "" || display === "none") { + elem.style.display = jQuery._data(elem, "olddisplay") || ""; + } + } + } + + return this; + } + }; + jQuery.prototype.siblings = function (until, selector) { + /// + /// Get the siblings of each element in the set of matched elements, optionally filtered by a selector. + /// + /// + /// A string containing a selector expression to match elements against. + /// + /// + + var ret = jQuery.map(this, fn, until); + + if (!runtil.test(name)) { + selector = until; + } + + if (selector && typeof selector === "string") { + ret = jQuery.filter(selector, ret); + } + + ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret; + + if ((this.length > 1 || rmultiselector.test(selector)) && rparentsprev.test(name)) { + ret = ret.reverse(); + } + + return this.pushStack(ret, name, slice.call(arguments).join(",")); + }; + jQuery.prototype.size = function () { + /// + /// Return the number of elements in the jQuery object. + /// + /// + + return this.length; + }; + jQuery.prototype.slice = function () { + /// + /// Reduce the set of matched elements to a subset specified by a range of indices. + /// + /// + /// An integer indicating the 0-based position at which the elements begin to be selected. If negative, it indicates an offset from the end of the set. + /// + /// + /// An integer indicating the 0-based position at which the elements stop being selected. If negative, it indicates an offset from the end of the set. If omitted, the range continues until the end of the set. + /// + /// + + return this.pushStack(slice.apply(this, arguments), + "slice", slice.call(arguments).join(",")); + }; + jQuery.prototype.slideDown = function (speed, easing, callback) { + /// + /// Display the matched elements with a sliding motion. + /// 1 - slideDown(duration, callback) + /// 2 - slideDown(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideToggle = function (speed, easing, callback) { + /// + /// Display or hide the matched elements with a sliding motion. + /// 1 - slideToggle(duration, callback) + /// 2 - slideToggle(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.slideUp = function (speed, easing, callback) { + /// + /// Hide the matched elements with a sliding motion. + /// 1 - slideUp(duration, callback) + /// 2 - slideUp(duration, easing, callback) + /// + /// + /// A string or number determining how long the animation will run. + /// + /// + /// A string indicating which easing function to use for the transition. + /// + /// + /// A function to call once the animation is complete. + /// + /// + + return this.animate(props, speed, easing, callback); + }; + jQuery.prototype.stop = function (type, clearQueue, gotoEnd) { + /// + /// Stop the currently-running animation on the matched elements. + /// 1 - stop(clearQueue, jumpToEnd) + /// 2 - stop(queue, clearQueue, jumpToEnd) + /// + /// + /// The name of the queue in which to stop animations. + /// + /// + /// A Boolean indicating whether to remove queued animation as well. Defaults to false. + /// + /// + /// A Boolean indicating whether to complete the current animation immediately. Defaults to false. + /// + /// + + if (typeof type !== "string") { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if (clearQueue && type !== false) { + this.queue(type || "fx", []); + } + + return this.each(function () { + var index, + hadTimers = false, + timers = jQuery.timers, + data = jQuery._data(this); + + // clear marker counters if we know they won't be + if (!gotoEnd) { + jQuery._unmark(true, this); + } + + function stopQueue(elem, data, index) { + var hooks = data[index]; + jQuery.removeData(elem, index, true); + hooks.stop(gotoEnd); + } + + if (type == null) { + for (index in data) { + if (data[index] && data[index].stop && index.indexOf(".run") === index.length - 4) { + stopQueue(this, data, index); + } + } + } else if (data[index = type + ".run"] && data[index].stop) { + stopQueue(this, data, index); + } + + for (index = timers.length; index--;) { + if (timers[index].elem === this && (type == null || timers[index].queue === type)) { + if (gotoEnd) { + + // force the next step to be the last + timers[index](true); + } else { + timers[index].saveState(); + } + hadTimers = true; + timers.splice(index, 1); + } + } + + // start the next in the queue if the last step wasn't forced + // timers currently will call their complete callbacks, which will dequeue + // but only if they were gotoEnd + if (!(gotoEnd && hadTimers)) { + jQuery.dequeue(this, type); + } + }); + }; + jQuery.prototype.submit = function (data, fn) { + /// + /// Bind an event handler to the "submit" JavaScript event, or trigger that event on an element. + /// 1 - submit(handler(eventObject)) + /// 2 - submit(eventData, handler(eventObject)) + /// 3 - submit() + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.text = function (value) { + /// + /// 1: Get the combined text contents of each element in the set of matched elements, including their descendants. + /// 1.1 - text() + /// 2: Set the content of each element in the set of matched elements to the specified text. + /// 2.1 - text(textString) + /// 2.2 - text(function(index, text)) + /// + /// + /// A string of text to set as the content of each matched element. + /// + /// + + return jQuery.access(this, function (value) { + return value === undefined ? + jQuery.text(this) : + this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); + }, null, value, arguments.length); + }; + jQuery.prototype.toArray = function () { + /// + /// Retrieve all the DOM elements contained in the jQuery set, as an array. + /// + /// + + return slice.call(this, 0); + }; + jQuery.prototype.toggle = function (fn, fn2, callback) { + /// + /// 1: Bind two or more handlers to the matched elements, to be executed on alternate clicks. + /// 1.1 - toggle(handler(eventObject), handler(eventObject), handler(eventObject)) + /// 2: Display or hide the matched elements. + /// 2.1 - toggle(duration, callback) + /// 2.2 - toggle(duration, easing, callback) + /// 2.3 - toggle(showOrHide) + /// + /// + /// A function to execute every even time the element is clicked. + /// + /// + /// A function to execute every odd time the element is clicked. + /// + /// + /// Additional handlers to cycle through after clicks. + /// + /// + + var bool = typeof fn === "boolean"; + + if (jQuery.isFunction(fn) && jQuery.isFunction(fn2)) { + this._toggle.apply(this, arguments); + + } else if (fn == null || bool) { + this.each(function () { + var state = bool ? fn : jQuery(this).is(":hidden"); + jQuery(this)[state ? "show" : "hide"](); + }); + + } else { + this.animate(genFx("toggle", 3), fn, fn2, callback); + } + + return this; + }; + jQuery.prototype.toggleClass = function (value, stateVal) { + /// + /// Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the switch argument. + /// 1 - toggleClass(className) + /// 2 - toggleClass(className, switch) + /// 3 - toggleClass(switch) + /// 4 - toggleClass(function(index, class, switch), switch) + /// + /// + /// One or more class names (separated by spaces) to be toggled for each element in the matched set. + /// + /// + /// A Boolean (not just truthy/falsy) value to determine whether the class should be added or removed. + /// + /// + + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if (jQuery.isFunction(value)) { + return this.each(function (i) { + jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal); + }); + } + + return this.each(function () { + if (type === "string") { + // toggle individual class names + var className, + i = 0, + self = jQuery(this), + state = stateVal, + classNames = value.split(rspace); + + while ((className = classNames[i++])) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass(className); + self[state ? "addClass" : "removeClass"](className); + } + + } else if (type === "undefined" || type === "boolean") { + if (this.className) { + // store className if set + jQuery._data(this, "__className__", this.className); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data(this, "__className__") || ""; + } + }); + }; + jQuery.prototype.trigger = function (type, data) { + /// + /// Execute all handlers and behaviors attached to the matched elements for the given event type. + /// 1 - trigger(eventType, extraParameters) + /// 2 - trigger(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// Additional parameters to pass along to the event handler. + /// + /// + + return this.each(function () { + jQuery.event.trigger(type, data, this); + }); + }; + jQuery.prototype.triggerHandler = function (type, data) { + /// + /// Execute all handlers attached to an element for an event. + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// An array of additional parameters to pass along to the event handler. + /// + /// + + if (this[0]) { + return jQuery.event.trigger(type, data, this[0], true); + } + }; + jQuery.prototype.unbind = function (types, fn) { + /// + /// Remove a previously-attached event handler from the elements. + /// 1 - unbind(eventType, handler(eventObject)) + /// 2 - unbind(eventType, false) + /// 3 - unbind(event) + /// + /// + /// A string containing a JavaScript event type, such as click or submit. + /// + /// + /// The function that is to be no longer executed. + /// + /// + + return this.off(types, null, fn); + }; + jQuery.prototype.undelegate = function (selector, types, fn) { + /// + /// Remove a handler from the event for all elements which match the current selector, based upon a specific set of root elements. + /// 1 - undelegate() + /// 2 - undelegate(selector, eventType) + /// 3 - undelegate(selector, eventType, handler(eventObject)) + /// 4 - undelegate(selector, events) + /// 5 - undelegate(namespace) + /// + /// + /// A selector which will be used to filter the event results. + /// + /// + /// A string containing a JavaScript event type, such as "click" or "keydown" + /// + /// + /// A function to execute at the time the event is triggered. + /// + /// + + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1 ? this.off(selector, "**") : this.off(types, selector, fn); + }; + jQuery.prototype.unload = function (data, fn) { + /// + /// Bind an event handler to the "unload" JavaScript event. + /// 1 - unload(handler(eventObject)) + /// 2 - unload(eventData, handler(eventObject)) + /// + /// + /// A map of data that will be passed to the event handler. + /// + /// + /// A function to execute each time the event is triggered. + /// + /// + + if (fn == null) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on(name, null, data, fn) : + this.trigger(name); + }; + jQuery.prototype.unwrap = function () { + /// + /// Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place. + /// + /// + + return this.parent().each(function () { + if (!jQuery.nodeName(this, "body")) { + jQuery(this).replaceWith(this.childNodes); + } + }).end(); + }; + jQuery.prototype.val = function (value) { + /// + /// 1: Get the current value of the first element in the set of matched elements. + /// 1.1 - val() + /// 2: Set the value of each element in the set of matched elements. + /// 2.1 - val(value) + /// 2.2 - val(function(index, value)) + /// + /// + /// A string of text or an array of strings corresponding to the value of each matched element to set as selected/checked. + /// + /// + + var hooks, ret, isFunction, + elem = this[0]; + + if (!arguments.length) { + if (elem) { + hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()]; + + if (hooks && "get" in hooks && (ret = hooks.get(elem, "value")) !== undefined) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction(value); + + return this.each(function (i) { + var self = jQuery(this), val; + + if (this.nodeType !== 1) { + return; + } + + if (isFunction) { + val = value.call(this, i, self.val()); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if (val == null) { + val = ""; + } else if (typeof val === "number") { + val += ""; + } else if (jQuery.isArray(val)) { + val = jQuery.map(val, function (value) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; + + // If set returns undefined, fall back to normal setting + if (!hooks || !("set" in hooks) || hooks.set(this, val, "value") === undefined) { + this.value = val; + } + }); + }; + jQuery.prototype.width = function (value) { + /// + /// 1: Get the current computed width for the first element in the set of matched elements. + /// 1.1 - width() + /// 2: Set the CSS width of each element in the set of matched elements. + /// 2.1 - width(value) + /// 2.2 - width(function(index, width)) + /// + /// + /// An integer representing the number of pixels, or an integer along with an optional unit of measure appended (as a string). + /// + /// + + return jQuery.access(this, function (elem, type, value) { + var doc, docElemProp, orig, ret; + + if (jQuery.isWindow(elem)) { + // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat + doc = elem.document; + docElemProp = doc.documentElement[clientProp]; + return jQuery.support.boxModel && docElemProp || + doc.body && doc.body[clientProp] || docElemProp; + } + + // Get document width or height + if (elem.nodeType === 9) { + // Either scroll[Width/Height] or offset[Width/Height], whichever is greater + doc = elem.documentElement; + + // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height] + // so we can't use max, as it'll choose the incorrect offset[Width/Height] + // instead we use the correct client[Width/Height] + // support:IE6 + if (doc[clientProp] >= doc[scrollProp]) { + return doc[clientProp]; + } + + return Math.max( + elem.body[scrollProp], doc[scrollProp], + elem.body[offsetProp], doc[offsetProp] + ); + } + + // Get width or height on the element + if (value === undefined) { + orig = jQuery.css(elem, type); + ret = parseFloat(orig); + return jQuery.isNumeric(ret) ? ret : orig; + } + + // Set the width or height on the element + jQuery(elem).css(type, value); + }, type, value, arguments.length, null); + }; + jQuery.prototype.wrap = function (html) { + /// + /// Wrap an HTML structure around each element in the set of matched elements. + /// 1 - wrap(wrappingElement) + /// 2 - wrap(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + var isFunction = jQuery.isFunction(html); + + return this.each(function (i) { + jQuery(this).wrapAll(isFunction ? html.call(this, i) : html); + }); + }; + jQuery.prototype.wrapAll = function (html) { + /// + /// Wrap an HTML structure around all elements in the set of matched elements. + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapAll(html.call(this, i)); + }); + } + + if (this[0]) { + // The elements to wrap the target around + var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true); + + if (this[0].parentNode) { + wrap.insertBefore(this[0]); + } + + wrap.map(function () { + var elem = this; + + while (elem.firstChild && elem.firstChild.nodeType === 1) { + elem = elem.firstChild; + } + + return elem; + }).append(this); + } + + return this; + }; + jQuery.prototype.wrapInner = function (html) { + /// + /// Wrap an HTML structure around the content of each element in the set of matched elements. + /// 1 - wrapInner(wrappingElement) + /// 2 - wrapInner(function(index)) + /// + /// + /// An HTML snippet, selector expression, jQuery object, or DOM element specifying the structure to wrap around the content of the matched elements. + /// + /// + + if (jQuery.isFunction(html)) { + return this.each(function (i) { + jQuery(this).wrapInner(html.call(this, i)); + }); + } + + return this.each(function () { + var self = jQuery(this), + contents = self.contents(); + + if (contents.length) { + contents.wrapAll(html); + + } else { + self.append(html); + } + }); + }; + jQuery.fn = jQuery.prototype; + jQuery.fn.init.prototype = jQuery.fn; + window.jQuery = window.$ = jQuery; +})(window); \ No newline at end of file diff --git a/packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2.js b/packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2.js new file mode 100644 index 0000000..3774ff9 --- /dev/null +++ b/packages/jQuery.1.7.2/Content/Scripts/jquery-1.7.2.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
" + + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and