From 17b4659ccbef71580655b1afb39c26b8beb24afa Mon Sep 17 00:00:00 2001 From: Scott Xu Date: Thu, 19 Oct 2017 22:13:45 +0800 Subject: [PATCH] prepare 3.3.0 --- .gitignore | 16 +- CHANGELOG.md | 10 + ...Ninject.Web.Mvc.sln => Ninject.Web.Mvc.sln | 15 +- README.markdown | 26 - README.md | 34 + appveyor.yml | 40 + lib/Mvc1/System.Web.Mvc.dll | Bin 186176 -> 0 bytes lib/Mvc2/System.Web.Mvc.dll | Bin 375632 -> 0 bytes lib/Mvc2/System.Web.Mvc.xml | 8318 ----- lib/Mvc3/System.Web.Mvc.dll | Bin 445280 -> 0 bytes lib/Ninject.Web.Common/RequiredDependency.txt | 1 - lib/Ninject/RequiredDependency.txt | 1 - lib/log4net/LICENSE.txt | 201 - lib/log4net/NOTICE.txt | 15 - lib/log4net/README.txt | 20 - lib/log4net/mono-2.0/log4net.dll | Bin 237568 -> 0 bytes lib/log4net/mono-2.0/log4net.xml | 25592 -------------- lib/log4net/net-3.5/log4net.dll | Bin 270336 -> 0 bytes lib/log4net/net-3.5/log4net.xml | 28655 ---------------- lib/log4net/netcf-3.5/log4net.dll | Bin 225280 -> 0 bytes lib/log4net/netcf-3.5/log4net.xml | 25118 -------------- mvc1/HowToBuild.txt | 29 - mvc1/LICENSE.txt | 175 - mvc1/Ninject.Web.Mvc.build | 46 - mvc1/Ninject.Web.Mvc.sln | 25 - mvc1/Ninject.build | 3 - mvc1/Ninject.include | 792 - mvc1/ReleaseNotes.txt | 3 - mvc1/UnzipDependencies.cmd | 5 - mvc1/build-alpha.cmd | 32 - mvc1/build-beta.cmd | 32 - mvc1/build-rc1.cmd | 32 - mvc1/build-release.cmd | 32 - mvc1/build.cmd | 3 - mvc1/nuget/Ninject.Web.Mvc.nuspec | 20 - mvc1/src/Ninject.Web.Mvc.sln | 20 - mvc1/src/Ninject.Web.Mvc/MvcModule.cs | 45 - .../Ninject.Web.Mvc/Ninject.Web.Mvc.csproj | 123 - .../Ninject.Web.Mvc/NinjectActionInvoker.cs | 65 - .../NinjectActionInvoker.cs.orig | 65 - .../NinjectControllerFactory.cs | 66 - .../NinjectMvcHttpApplicationPlugin.cs | 82 - .../Properties/AssemblyInfo.cs | 26 - mvc1/src/SampleApplication/Content/Site.css | 317 - .../Controllers/AccountController.cs | 364 - .../Controllers/HomeController.cs | 65 - .../Controllers/HomeControllerModel.cs | 39 - .../Controllers/IHomeControllerModel.cs | 33 - .../Controllers/LoggingFilterAttribute.cs | 57 - mvc1/src/SampleApplication/Default.aspx | 3 - mvc1/src/SampleApplication/Default.aspx.cs | 22 - mvc1/src/SampleApplication/Global.asax.cs | 77 - .../Properties/AssemblyInfo.cs | 35 - .../SampleApplication.csproj | 149 - .../SampleApplication/SampleApplication.sln | 20 - .../Scripts/MicrosoftAjax.debug.js | 6850 ---- .../Scripts/MicrosoftAjax.js | 7 - .../Scripts/MicrosoftMvcAjax.debug.js | 337 - .../Scripts/MicrosoftMvcAjax.js | 23 - .../Scripts/jquery-1.3.2-vsdoc.js | 6255 ---- .../SampleApplication/Scripts/jquery-1.3.2.js | 4410 --- .../Scripts/jquery-1.3.2.min-vsdoc.js | 6255 ---- .../Scripts/jquery-1.3.2.min.js | 53 - .../Account/AccountMembershipService.cs | 151 - .../Services/Account/IMembershipService.cs | 63 - .../Views/Account/ChangePassword.aspx | 42 - .../Views/Account/ChangePasswordSuccess.aspx | 12 - .../Views/Account/LogOn.aspx | 37 - .../Views/Account/Register.aspx | 47 - .../SampleApplication/Views/Home/About.aspx | 12 - .../SampleApplication/Views/Home/Index.aspx | 12 - .../SampleApplication/Views/Shared/Error.aspx | 11 - .../Views/Shared/LogOnUserControl.ascx | 14 - .../Views/Shared/Site.Master | 40 - mvc1/src/SampleApplication/Views/Web.config | 34 - mvc1/src/SampleApplication/Web.config | 152 - mvc1/src/SharedAssemblyInfo.cs | 21 - mvc2/HowToBuild.txt | 29 - mvc2/LICENSE.txt | 175 - mvc2/Ninject.Web.Mvc.build | 46 - mvc2/Ninject.Web.Mvc.sln | 31 - mvc2/Ninject.build | 3 - mvc2/Ninject.include | 792 - mvc2/ReleaseNotes.txt | 3 - mvc2/UnzipDependencies.cmd | 5 - mvc2/build-alpha.cmd | 32 - mvc2/build-beta.cmd | 32 - mvc2/build-rc1.cmd | 32 - mvc2/build-release.cmd | 32 - mvc2/build.cmd | 3 - mvc2/nuget/Ninject.Web.Mvc.nuspec | 20 - .../ControllerMissingBindingResolver.cs | 50 - mvc2/src/Ninject.Web.Mvc/FilterInjector.cs | 60 - mvc2/src/Ninject.Web.Mvc/IFilterInjector.cs | 24 - mvc2/src/Ninject.Web.Mvc/MvcModule.cs | 52 - .../Ninject.Web.Mvc/Ninject.Web.Mvc.csproj | 128 - .../Ninject.Web.Mvc/NinjectActionInvoker.cs | 45 - .../NinjectAsyncActionInvoker.cs | 46 - .../NinjectControllerFactory.cs | 53 - .../NinjectMvcHttpApplicationPlugin.cs | 82 - .../Properties/AssemblyInfo.cs | 24 - mvc2/src/Ninject.snk | Bin 596 -> 0 bytes .../Controllers/AreaTestController.cs | 54 - .../SampleArea/Views/AreaTest/Index.aspx | 12 - .../Areas/SampleArea/Views/Web.config | 35 - .../Controllers/AccountController.cs | 187 - .../Controllers/HomeController.cs | 74 - .../Controllers/HomeControllerModel.cs | 39 - .../Controllers/IHomeControllerModel.cs | 33 - .../Controllers/LoggingFilterAttribute.cs | 57 - mvc2/src/SampleApplication/Global.asax | 1 - mvc2/src/SampleApplication/Global.asax.cs | 75 - .../Models/Account/CompareAttribute.cs | 95 - .../ValidatePasswordLengthAttribute.cs | 76 - .../Properties/AssemblyInfo.cs | 53 - .../SampleApplication.csproj | 178 - .../Scripts/MicrosoftAjax.debug.js | 7117 ---- .../Scripts/MicrosoftMvcValidation.debug.js | 881 - .../Scripts/MicrosoftMvcValidation.js | 55 - .../Scripts/jquery-1.4.1-vsdoc.js | 8061 ----- .../SampleApplication/Scripts/jquery-1.4.1.js | 6111 ---- .../Scripts/jquery.validate-vsdoc.js | 1292 - .../Scripts/jquery.validate.js | 1155 - .../Services/Account/AccountModule.cs | 40 - .../Account/FormsAuthenticationService.cs | 53 - .../Account/IFormsAuthenticationService.cs | 39 - .../Views/Account/ChangePassword.aspx | 52 - .../Views/Account/ChangePasswordSuccess.aspx | 12 - .../Views/Account/LogOn.aspx | 46 - .../Views/Account/Register.aspx | 60 - .../SampleApplication/Views/Home/About.aspx | 12 - .../SampleApplication/Views/Home/Index.aspx | 18 - .../SampleApplication/Views/Shared/Error.aspx | 11 - .../Views/Shared/LogOnUserControl.ascx | 14 - .../Views/Shared/Site.Master | 41 - mvc2/src/SampleApplication/Views/Web.config | 35 - mvc2/src/SampleApplication/Web.Debug.config | 30 - mvc2/src/SampleApplication/Web.config | 77 - mvc2/src/SharedAssemblyInfo.cs | 21 - mvc3/HowToBuild.txt | 29 - mvc3/LICENSE.txt | 175 - mvc3/Ninject.Web.Mvc.build | 89 - mvc3/Ninject.build | 3 - mvc3/Ninject.include | 792 - mvc3/ReleaseNotes.txt | 26 - mvc3/UnzipDependencies.cmd | 5 - mvc3/build-alpha.cmd | 32 - mvc3/build-beta.cmd | 32 - mvc3/build-rc1.cmd | 32 - mvc3/build-release.cmd | 32 - mvc3/build.cmd | 3 - mvc3/nuget-MVC4/Ninject.Web.Mvc.nuspec | 23 - mvc3/nuget-MVC5/Ninject.Web.Mvc.nuspec | 23 - mvc3/nuget/Ninject.Web.Mvc.nuspec | 23 - .../Ninject.Web.Mvc/Filter/INinjectFilter.cs | 37 - .../IFilterBindingInNamedWithOrOnSyntax.cs | 33 - .../IFilterBindingNamedSyntax.cs | 38 - .../IFilterBindingNamedWithOrOnSyntax.cs | 32 - ...IFilterBindingWhenInNamedWithOrOnSyntax.cs | 34 - .../IFilterBindingWithOrOnSyntax.cs | 31 - mvc3/src/Ninject.Web.Mvc/MvcModule.cs | 51 - .../Ninject.Web.Mvc/Ninject.Web.Mvc.csproj | 142 - .../Properties/AssemblyInfo.cs | 22 - mvc3/src/Ninject.snk | Bin 596 -> 0 bytes .../SampleApplication/App_Data/ASPNETDB.MDF | Bin 10485760 -> 0 bytes .../App_Data/aspnetdb_log.ldf | Bin 516096 -> 0 bytes .../SampleArea/SampleAreaAreaRegistration.cs | 54 - mvc3/src/SampleApplication/Content/Site.css | 344 - mvc3/src/SampleApplication/Global.asax | 1 - .../Account/AccountValidationErrorMessages.cs | 72 - .../Models/Account/ChangePasswordModel.cs | 57 - .../Models/Account/LogOnModel.cs | 53 - .../Models/Account/RegisterModel.cs | 65 - .../Scripts/MicrosoftAjax.js | 6 - .../Scripts/MicrosoftMvcAjax.debug.js | 408 - .../Scripts/MicrosoftMvcAjax.js | 25 - .../Scripts/jquery-1.4.1.min.js | 167 - .../Scripts/jquery.validate.min.js | 31 - .../Account/AccountMembershipService.cs | 151 - .../Services/Account/AccountModule.cs | 40 - .../Account/FormsAuthenticationService.cs | 53 - .../Account/IFormsAuthenticationService.cs | 39 - .../Services/Account/IMembershipService.cs | 61 - mvc3/src/SampleApplication/Web.Release.config | 31 - mvc3/src/SampleApplication/Web.config | 89 - mvc3/src/SharedAssemblyInfo.cs | 21 - .../Filter/FilterContextParameter.cs | 24 +- src/Ninject.Web.Mvc/Filter/INinjectFilter.cs | 26 + .../Ninject.Web.Mvc/Filter/NinjectFilter.cs | 25 +- .../NinjectFilterAttributeFilterProvider.cs | 23 +- .../Filter/NinjectFilterProvider.cs | 23 +- .../AttributeValueSelector.cs | 23 +- .../BindingRootExtensions.cs | 28 +- .../FilterFilterBindingBuilder.cs | 44 +- .../IConstructorArgumentSyntaxExtensions.cs | 23 +- .../IFilterBindingInNamedWithOrOnSyntax.cs | 22 + .../IFilterBindingInSyntax.cs | 24 +- .../IFilterBindingNamedSyntax.cs | 27 + .../IFilterBindingNamedWithOrOnSyntax.cs | 21 + .../IFilterBindingOnSyntax.cs | 24 +- ...IFilterBindingWhenInNamedWithOrOnSyntax.cs | 23 + .../IFilterBindingWhenSyntax.cs | 26 +- .../IFilterBindingWithOrOnSyntax.cs | 20 + .../IFilterBindingWithSyntax.cs | 24 +- src/Ninject.Web.Mvc/MvcModule.cs | 35 + src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj | 47 + .../NinjectDependencyResolver.cs | 24 +- .../NinjectMvcHttpApplicationPlugin.cs | 25 +- ...ctDataAnnotationsModelValidatorProvider.cs | 25 +- src/Ninject.Web.Mvc/stylecop.json | 16 + {mvc1/src => src}/Ninject.snk | Bin .../Controllers/AreaTestController.cs | 0 .../SampleArea/SampleAreaAreaRegistration.cs | 0 .../SampleArea/Views/AreaTest/Index.cshtml | 0 .../Areas/SampleArea/Views/Web.config | 8 +- .../SampleApplication/Content/Site.css | 0 .../HomeController.cs | 0 .../AccountController.cs | 0 .../FilterInjectionExamples/CacheAttribute.cs | 0 .../ClearCacheOnSuccessAttribute.cs | 0 .../DistributedCacheFilter.cs | 0 .../FilterInjectionModule.cs | 0 .../FilterInjectionExamples/LogAttribute.cs | 0 .../FilterInjectionExamples/LogFilter.cs | 0 .../MovieController.cs | 0 .../InjectedWebViewPage.cs | 0 .../ViewInjectionExample/MathController.cs | 0 .../src => src}/SampleApplication/Global.asax | 0 .../SampleApplication/Global.asax.cs | 2 +- .../Account/AccountValidationErrorMessages.cs | 0 .../Models/Account/ChangePasswordModel.cs | 0 .../Models/Account/CompareAttribute.cs | 0 .../Models/Account/LogOnModel.cs | 0 .../Models/Account/RegisterModel.cs | 0 .../ValidatePasswordLengthAttribute.cs | 0 .../Models/Movie/Movies.Designer.cs | 30 +- .../Models/Movie/Movies.edmx | 16 +- .../Models/Movie/Movies.edmx.sql | 0 .../Models/Movie/MoviesMetadata.cs | 0 .../Models/Movie/PriceRangeAttribute.cs | 0 .../Properties/AssemblyInfo.cs | 0 .../SampleApplication.Publish.xml | 0 .../SampleApplication.csproj | 75 +- .../Scripts/MicrosoftAjax.debug.js | 0 .../Scripts/MicrosoftAjax.js | 0 .../Scripts/MicrosoftMvcAjax.debug.js | 0 .../Scripts/MicrosoftMvcAjax.js | 0 .../Scripts/MicrosoftMvcValidation.debug.js | 0 .../Scripts/MicrosoftMvcValidation.js | 0 .../Scripts/jquery-1.4.1-vsdoc.js | 0 .../SampleApplication/Scripts/jquery-1.4.1.js | 0 .../Scripts/jquery-1.4.1.min.js | 0 .../Scripts/jquery.unobtrusive-ajax.js | 0 .../Scripts/jquery.unobtrusive-ajax.min.js | 0 .../Scripts/jquery.validate-vsdoc.js | 0 .../Scripts/jquery.validate.js | 0 .../Scripts/jquery.validate.min.js | 0 .../Scripts/jquery.validate.unobtrusive.js | 0 .../jquery.validate.unobtrusive.min.js | 0 .../Account/AccountMembershipService.cs | 0 .../Services/Account/AccountModule.cs | 0 .../Account/FormsAuthenticationService.cs | 0 .../Account/IFormsAuthenticationService.cs | 0 .../Services/Account/IMembershipService.cs | 0 .../DateTimeProvider.cs | 0 .../DistributedCacheService.cs | 0 .../DistributedCacheServiceModule.cs | 0 .../IDateTimeProvider.cs | 0 .../IDistributedCacheService.cs | 0 .../Services/GenreService/GenreService.cs | 0 .../GenreService/GenreServiceModule.cs | 0 .../Services/GenreService/IGenreService.cs | 0 .../Services/MathService/IMathService.cs | 0 .../Services/MathService/MathService.cs | 0 .../Services/MathService/MathServiceModule.cs | 0 .../PriceingService/IPriceingService.cs | 0 .../PriceingService/PriceingService.cs | 0 .../PriceingService/PriceingServiceModule.cs | 0 .../IWelcomeMessageService.cs | 0 .../WelcomeMessageService/WebSession.cs | 0 .../WelcomeMessageService.cs | 0 .../WelcomeMessageServiceModule.cs | 0 .../Views/Account/ChangePassword.cshtml | 0 .../Account/ChangePasswordSuccess.cshtml | 0 .../Views/Account/LogOn.cshtml | 0 .../Views/Account/Register.cshtml | 0 .../SampleApplication/Views/Home/About.cshtml | 0 .../SampleApplication/Views/Home/Index.cshtml | 0 .../SampleApplication/Views/Math/Index.cshtml | 0 .../Views/Movie/Create.cshtml | 0 .../Views/Movie/Index.cshtml | 0 .../Views/Shared/Error.cshtml | 0 .../Views/Shared/_Layout.cshtml | 0 .../Views/Shared/_LogOnPartial.cshtml | 0 .../SampleApplication/Views/Web.config | 16 +- .../SampleApplication/Views/_ViewStart.cshtml | 0 .../SampleApplication/Web.Debug.config | 0 .../SampleApplication/Web.Release.config | 0 src/SampleApplication/Web.config | 101 + src/SampleApplication/packages.config | 11 + .../SampleApplication/web_mediumtrust.config | 0 tools/git/git.exe | Bin 1071616 -> 0 bytes tools/git/libiconv2.dll | Bin 978432 -> 0 bytes tools/git/pthreadGC2.dll | Bin 65124 -> 0 bytes tools/nant/CollectionGen.dll | Bin 73728 -> 0 bytes tools/nant/ILMerge.NAntTasks.dll | Bin 6656 -> 0 bytes tools/nant/Interop.MsmMergeTypeLib.dll | Bin 11776 -> 0 bytes tools/nant/Interop.StarTeam.dll | Bin 462848 -> 0 bytes tools/nant/Interop.WindowsInstaller.dll | Bin 32768 -> 0 bytes tools/nant/MonoLinker.NAntTasks.dll | Bin 7168 -> 0 bytes tools/nant/MonoMerge.NAntTasks.dll | Bin 6144 -> 0 bytes tools/nant/NAnt.CompressionTasks.dll | Bin 36864 -> 0 bytes tools/nant/NAnt.CompressionTasks.xml | 711 - tools/nant/NAnt.Contrib.Tasks.dll | Bin 1171456 -> 0 bytes tools/nant/NAnt.Contrib.Tasks.xml | 19219 ----------- tools/nant/NAnt.Core.dll | Bin 376832 -> 0 bytes tools/nant/NAnt.Core.xml | 16161 --------- tools/nant/NAnt.DotNetTasks.dll | Bin 131072 -> 0 bytes tools/nant/NAnt.DotNetTasks.xml | 5334 --- tools/nant/NAnt.MSNetTasks.dll | Bin 28672 -> 0 bytes tools/nant/NAnt.MSNetTasks.xml | 579 - tools/nant/NAnt.NUnit.dll | Bin 8704 -> 0 bytes tools/nant/NAnt.NUnit.xml | 353 - tools/nant/NAnt.NUnit1Tasks.dll | Bin 36864 -> 0 bytes tools/nant/NAnt.NUnit1Tasks.xml | 538 - tools/nant/NAnt.NUnit2Tasks.dll | Bin 32768 -> 0 bytes tools/nant/NAnt.NUnit2Tasks.xml | 584 - tools/nant/NAnt.SourceControlTasks.dll | Bin 40960 -> 0 bytes tools/nant/NAnt.SourceControlTasks.xml | 1279 - tools/nant/NAnt.VSNetTasks.dll | Bin 167936 -> 0 bytes tools/nant/NAnt.VSNetTasks.xml | 3961 --- tools/nant/NAnt.VisualCppTasks.dll | Bin 49152 -> 0 bytes tools/nant/NAnt.VisualCppTasks.xml | 1211 - tools/nant/NAnt.Win32Tasks.dll | Bin 27136 -> 0 bytes tools/nant/NAnt.Win32Tasks.xml | 800 - tools/nant/NAnt.exe | Bin 12800 -> 0 bytes tools/nant/NAnt.exe.config | 3933 --- tools/nant/NAnt.xml | 78 - tools/nant/NDoc.Documenter.NAnt.dll | Bin 131072 -> 0 bytes tools/nant/SLiNgshoT.Core.dll | Bin 53248 -> 0 bytes tools/nant/SLiNgshoT.exe | Bin 6144 -> 0 bytes tools/nant/SourceSafe.Interop.dll | Bin 61440 -> 0 bytes .../SourceSafe.Interop.dll.VisualState.xml | 7 - tools/nant/XUnit.NAntTasks.dll | Bin 21504 -> 0 bytes .../extensions/common/2.0/NAnt.MSBuild.dll | Bin 36864 -> 0 bytes .../extensions/common/2.0/NAnt.MSBuild.xml | 36 - .../lib/common/1.1/nunit-console-runner.dll | Bin 16384 -> 0 bytes tools/nant/lib/common/1.1/nunit-console.exe | Bin 3072 -> 0 bytes tools/nant/lib/common/1.1/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/common/1.1/nunit.framework.dll | Bin 45056 -> 0 bytes tools/nant/lib/common/1.1/nunit.util.dll | Bin 86016 -> 0 bytes .../lib/common/2.0/nunit-console-runner.dll | Bin 16896 -> 0 bytes tools/nant/lib/common/2.0/nunit-console.exe | Bin 3584 -> 0 bytes tools/nant/lib/common/2.0/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/common/2.0/nunit.framework.dll | Bin 40960 -> 0 bytes tools/nant/lib/common/2.0/nunit.util.dll | Bin 86016 -> 0 bytes .../ICSharpCode.SharpCvsLib.Console.dll | Bin 98304 -> 0 bytes .../neutral/ICSharpCode.SharpCvsLib.dll | Bin 155648 -> 0 bytes .../neutral/ICSharpCode.SharpZipLib.dll | Bin 200704 -> 0 bytes tools/nant/lib/common/neutral/NDoc.Core.dll | Bin 208896 -> 0 bytes .../common/neutral/NDoc.Documenter.Msdn.dll | Bin 331776 -> 0 bytes .../lib/common/neutral/NDoc.ExtendedUI.dll | Bin 28672 -> 0 bytes tools/nant/lib/common/neutral/NUnitCore.dll | Bin 40960 -> 0 bytes tools/nant/lib/mono/1.0/NDoc.Core.dll | Bin 174592 -> 0 bytes .../lib/mono/1.0/NDoc.Documenter.Msdn.dll | Bin 318464 -> 0 bytes tools/nant/lib/mono/1.0/NDoc.ExtendedUI.dll | Bin 16896 -> 0 bytes tools/nant/lib/mono/1.0/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/mono/1.0/nunit.framework.dll | Bin 45056 -> 0 bytes tools/nant/lib/mono/1.0/nunit.util.dll | Bin 86016 -> 0 bytes tools/nant/lib/mono/2.0/NDoc.Core.dll | Bin 174592 -> 0 bytes .../lib/mono/2.0/NDoc.Documenter.Msdn.dll | Bin 318464 -> 0 bytes tools/nant/lib/mono/2.0/NDoc.ExtendedUI.dll | Bin 16896 -> 0 bytes tools/nant/lib/mono/2.0/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/mono/2.0/nunit.framework.dll | Bin 40960 -> 0 bytes tools/nant/lib/mono/2.0/nunit.util.dll | Bin 86016 -> 0 bytes tools/nant/lib/net/1.0/NDoc.Core.dll | Bin 208896 -> 0 bytes .../nant/lib/net/1.0/NDoc.Documenter.Msdn.dll | Bin 331776 -> 0 bytes tools/nant/lib/net/1.0/NDoc.ExtendedUI.dll | Bin 28672 -> 0 bytes .../nant/lib/net/1.0/nunit-console-runner.dll | Bin 16384 -> 0 bytes tools/nant/lib/net/1.0/nunit-console.exe | Bin 3072 -> 0 bytes tools/nant/lib/net/1.0/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/net/1.0/nunit.framework.dll | Bin 45056 -> 0 bytes tools/nant/lib/net/1.0/nunit.util.dll | Bin 86016 -> 0 bytes tools/nant/lib/net/1.1/NDoc.Core.dll | Bin 208896 -> 0 bytes .../nant/lib/net/1.1/NDoc.Documenter.Msdn.dll | Bin 331776 -> 0 bytes tools/nant/lib/net/1.1/NDoc.ExtendedUI.dll | Bin 28672 -> 0 bytes tools/nant/lib/net/1.1/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/net/1.1/nunit.framework.dll | Bin 45056 -> 0 bytes tools/nant/lib/net/1.1/nunit.util.dll | Bin 86016 -> 0 bytes tools/nant/lib/net/2.0/NDoc.Core.dll | Bin 208896 -> 0 bytes .../nant/lib/net/2.0/NDoc.Documenter.Msdn.dll | Bin 331776 -> 0 bytes tools/nant/lib/net/2.0/NDoc.ExtendedUI.dll | Bin 28672 -> 0 bytes tools/nant/lib/net/2.0/nunit.core.dll | Bin 86016 -> 0 bytes tools/nant/lib/net/2.0/nunit.framework.dll | Bin 40960 -> 0 bytes tools/nant/lib/net/2.0/nunit.util.dll | Bin 86016 -> 0 bytes tools/nant/log4net.dll | Bin 241664 -> 0 bytes tools/nant/scvs.exe | Bin 7680 -> 0 bytes tools/nant/xunit.dll | Bin 65536 -> 0 bytes tools/nant/xunit.runner.utility.dll | Bin 10240 -> 0 bytes tools/nuget/NuGet.exe | Bin 777728 -> 0 bytes 400 files changed, 649 insertions(+), 202326 deletions(-) create mode 100644 CHANGELOG.md rename mvc3/Ninject.Web.Mvc.sln => Ninject.Web.Mvc.sln (81%) delete mode 100644 README.markdown create mode 100644 README.md create mode 100644 appveyor.yml delete mode 100644 lib/Mvc1/System.Web.Mvc.dll delete mode 100644 lib/Mvc2/System.Web.Mvc.dll delete mode 100644 lib/Mvc2/System.Web.Mvc.xml delete mode 100644 lib/Mvc3/System.Web.Mvc.dll delete mode 100644 lib/Ninject.Web.Common/RequiredDependency.txt delete mode 100644 lib/Ninject/RequiredDependency.txt delete mode 100644 lib/log4net/LICENSE.txt delete mode 100644 lib/log4net/NOTICE.txt delete mode 100644 lib/log4net/README.txt delete mode 100644 lib/log4net/mono-2.0/log4net.dll delete mode 100644 lib/log4net/mono-2.0/log4net.xml delete mode 100644 lib/log4net/net-3.5/log4net.dll delete mode 100644 lib/log4net/net-3.5/log4net.xml delete mode 100644 lib/log4net/netcf-3.5/log4net.dll delete mode 100644 lib/log4net/netcf-3.5/log4net.xml delete mode 100644 mvc1/HowToBuild.txt delete mode 100644 mvc1/LICENSE.txt delete mode 100644 mvc1/Ninject.Web.Mvc.build delete mode 100644 mvc1/Ninject.Web.Mvc.sln delete mode 100644 mvc1/Ninject.build delete mode 100644 mvc1/Ninject.include delete mode 100644 mvc1/ReleaseNotes.txt delete mode 100644 mvc1/UnzipDependencies.cmd delete mode 100644 mvc1/build-alpha.cmd delete mode 100644 mvc1/build-beta.cmd delete mode 100644 mvc1/build-rc1.cmd delete mode 100644 mvc1/build-release.cmd delete mode 100644 mvc1/build.cmd delete mode 100644 mvc1/nuget/Ninject.Web.Mvc.nuspec delete mode 100644 mvc1/src/Ninject.Web.Mvc.sln delete mode 100644 mvc1/src/Ninject.Web.Mvc/MvcModule.cs delete mode 100644 mvc1/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj delete mode 100644 mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs delete mode 100644 mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs.orig delete mode 100644 mvc1/src/Ninject.Web.Mvc/NinjectControllerFactory.cs delete mode 100644 mvc1/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs delete mode 100644 mvc1/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs delete mode 100644 mvc1/src/SampleApplication/Content/Site.css delete mode 100644 mvc1/src/SampleApplication/Controllers/AccountController.cs delete mode 100644 mvc1/src/SampleApplication/Controllers/HomeController.cs delete mode 100644 mvc1/src/SampleApplication/Controllers/HomeControllerModel.cs delete mode 100644 mvc1/src/SampleApplication/Controllers/IHomeControllerModel.cs delete mode 100644 mvc1/src/SampleApplication/Controllers/LoggingFilterAttribute.cs delete mode 100644 mvc1/src/SampleApplication/Default.aspx delete mode 100644 mvc1/src/SampleApplication/Default.aspx.cs delete mode 100644 mvc1/src/SampleApplication/Global.asax.cs delete mode 100644 mvc1/src/SampleApplication/Properties/AssemblyInfo.cs delete mode 100644 mvc1/src/SampleApplication/SampleApplication.csproj delete mode 100644 mvc1/src/SampleApplication/SampleApplication.sln delete mode 100644 mvc1/src/SampleApplication/Scripts/MicrosoftAjax.debug.js delete mode 100644 mvc1/src/SampleApplication/Scripts/MicrosoftAjax.js delete mode 100644 mvc1/src/SampleApplication/Scripts/MicrosoftMvcAjax.debug.js delete mode 100644 mvc1/src/SampleApplication/Scripts/MicrosoftMvcAjax.js delete mode 100644 mvc1/src/SampleApplication/Scripts/jquery-1.3.2-vsdoc.js delete mode 100644 mvc1/src/SampleApplication/Scripts/jquery-1.3.2.js delete mode 100644 mvc1/src/SampleApplication/Scripts/jquery-1.3.2.min-vsdoc.js delete mode 100644 mvc1/src/SampleApplication/Scripts/jquery-1.3.2.min.js delete mode 100644 mvc1/src/SampleApplication/Services/Account/AccountMembershipService.cs delete mode 100644 mvc1/src/SampleApplication/Services/Account/IMembershipService.cs delete mode 100644 mvc1/src/SampleApplication/Views/Account/ChangePassword.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Account/ChangePasswordSuccess.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Account/LogOn.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Account/Register.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Home/About.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Home/Index.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Shared/Error.aspx delete mode 100644 mvc1/src/SampleApplication/Views/Shared/LogOnUserControl.ascx delete mode 100644 mvc1/src/SampleApplication/Views/Shared/Site.Master delete mode 100644 mvc1/src/SampleApplication/Views/Web.config delete mode 100644 mvc1/src/SampleApplication/Web.config delete mode 100644 mvc1/src/SharedAssemblyInfo.cs delete mode 100644 mvc2/HowToBuild.txt delete mode 100644 mvc2/LICENSE.txt delete mode 100644 mvc2/Ninject.Web.Mvc.build delete mode 100644 mvc2/Ninject.Web.Mvc.sln delete mode 100644 mvc2/Ninject.build delete mode 100644 mvc2/Ninject.include delete mode 100644 mvc2/ReleaseNotes.txt delete mode 100644 mvc2/UnzipDependencies.cmd delete mode 100644 mvc2/build-alpha.cmd delete mode 100644 mvc2/build-beta.cmd delete mode 100644 mvc2/build-rc1.cmd delete mode 100644 mvc2/build-release.cmd delete mode 100644 mvc2/build.cmd delete mode 100644 mvc2/nuget/Ninject.Web.Mvc.nuspec delete mode 100644 mvc2/src/Ninject.Web.Mvc/ControllerMissingBindingResolver.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/FilterInjector.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/IFilterInjector.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/MvcModule.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj delete mode 100644 mvc2/src/Ninject.Web.Mvc/NinjectActionInvoker.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/NinjectAsyncActionInvoker.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/NinjectControllerFactory.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs delete mode 100644 mvc2/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs delete mode 100644 mvc2/src/Ninject.snk delete mode 100644 mvc2/src/SampleApplication/Areas/SampleArea/Controllers/AreaTestController.cs delete mode 100644 mvc2/src/SampleApplication/Areas/SampleArea/Views/AreaTest/Index.aspx delete mode 100644 mvc2/src/SampleApplication/Areas/SampleArea/Views/Web.config delete mode 100644 mvc2/src/SampleApplication/Controllers/AccountController.cs delete mode 100644 mvc2/src/SampleApplication/Controllers/HomeController.cs delete mode 100644 mvc2/src/SampleApplication/Controllers/HomeControllerModel.cs delete mode 100644 mvc2/src/SampleApplication/Controllers/IHomeControllerModel.cs delete mode 100644 mvc2/src/SampleApplication/Controllers/LoggingFilterAttribute.cs delete mode 100644 mvc2/src/SampleApplication/Global.asax delete mode 100644 mvc2/src/SampleApplication/Global.asax.cs delete mode 100644 mvc2/src/SampleApplication/Models/Account/CompareAttribute.cs delete mode 100644 mvc2/src/SampleApplication/Models/Account/ValidatePasswordLengthAttribute.cs delete mode 100644 mvc2/src/SampleApplication/Properties/AssemblyInfo.cs delete mode 100644 mvc2/src/SampleApplication/SampleApplication.csproj delete mode 100644 mvc2/src/SampleApplication/Scripts/MicrosoftAjax.debug.js delete mode 100644 mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.debug.js delete mode 100644 mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.js delete mode 100644 mvc2/src/SampleApplication/Scripts/jquery-1.4.1-vsdoc.js delete mode 100644 mvc2/src/SampleApplication/Scripts/jquery-1.4.1.js delete mode 100644 mvc2/src/SampleApplication/Scripts/jquery.validate-vsdoc.js delete mode 100644 mvc2/src/SampleApplication/Scripts/jquery.validate.js delete mode 100644 mvc2/src/SampleApplication/Services/Account/AccountModule.cs delete mode 100644 mvc2/src/SampleApplication/Services/Account/FormsAuthenticationService.cs delete mode 100644 mvc2/src/SampleApplication/Services/Account/IFormsAuthenticationService.cs delete mode 100644 mvc2/src/SampleApplication/Views/Account/ChangePassword.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Account/ChangePasswordSuccess.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Account/LogOn.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Account/Register.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Home/About.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Home/Index.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Shared/Error.aspx delete mode 100644 mvc2/src/SampleApplication/Views/Shared/LogOnUserControl.ascx delete mode 100644 mvc2/src/SampleApplication/Views/Shared/Site.Master delete mode 100644 mvc2/src/SampleApplication/Views/Web.config delete mode 100644 mvc2/src/SampleApplication/Web.Debug.config delete mode 100644 mvc2/src/SampleApplication/Web.config delete mode 100644 mvc2/src/SharedAssemblyInfo.cs delete mode 100644 mvc3/HowToBuild.txt delete mode 100644 mvc3/LICENSE.txt delete mode 100644 mvc3/Ninject.Web.Mvc.build delete mode 100644 mvc3/Ninject.build delete mode 100644 mvc3/Ninject.include delete mode 100644 mvc3/ReleaseNotes.txt delete mode 100644 mvc3/UnzipDependencies.cmd delete mode 100644 mvc3/build-alpha.cmd delete mode 100644 mvc3/build-beta.cmd delete mode 100644 mvc3/build-rc1.cmd delete mode 100644 mvc3/build-release.cmd delete mode 100644 mvc3/build.cmd delete mode 100644 mvc3/nuget-MVC4/Ninject.Web.Mvc.nuspec delete mode 100644 mvc3/nuget-MVC5/Ninject.Web.Mvc.nuspec delete mode 100644 mvc3/nuget/Ninject.Web.Mvc.nuspec delete mode 100644 mvc3/src/Ninject.Web.Mvc/Filter/INinjectFilter.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingInNamedWithOrOnSyntax.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedSyntax.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedWithOrOnSyntax.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWhenInNamedWithOrOnSyntax.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWithOrOnSyntax.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/MvcModule.cs delete mode 100644 mvc3/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj delete mode 100644 mvc3/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs delete mode 100644 mvc3/src/Ninject.snk delete mode 100644 mvc3/src/SampleApplication/App_Data/ASPNETDB.MDF delete mode 100644 mvc3/src/SampleApplication/App_Data/aspnetdb_log.ldf delete mode 100644 mvc3/src/SampleApplication/Areas/SampleArea/SampleAreaAreaRegistration.cs delete mode 100644 mvc3/src/SampleApplication/Content/Site.css delete mode 100644 mvc3/src/SampleApplication/Global.asax delete mode 100644 mvc3/src/SampleApplication/Models/Account/AccountValidationErrorMessages.cs delete mode 100644 mvc3/src/SampleApplication/Models/Account/ChangePasswordModel.cs delete mode 100644 mvc3/src/SampleApplication/Models/Account/LogOnModel.cs delete mode 100644 mvc3/src/SampleApplication/Models/Account/RegisterModel.cs delete mode 100644 mvc3/src/SampleApplication/Scripts/MicrosoftAjax.js delete mode 100644 mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.debug.js delete mode 100644 mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.js delete mode 100644 mvc3/src/SampleApplication/Scripts/jquery-1.4.1.min.js delete mode 100644 mvc3/src/SampleApplication/Scripts/jquery.validate.min.js delete mode 100644 mvc3/src/SampleApplication/Services/Account/AccountMembershipService.cs delete mode 100644 mvc3/src/SampleApplication/Services/Account/AccountModule.cs delete mode 100644 mvc3/src/SampleApplication/Services/Account/FormsAuthenticationService.cs delete mode 100644 mvc3/src/SampleApplication/Services/Account/IFormsAuthenticationService.cs delete mode 100644 mvc3/src/SampleApplication/Services/Account/IMembershipService.cs delete mode 100644 mvc3/src/SampleApplication/Web.Release.config delete mode 100644 mvc3/src/SampleApplication/Web.config delete mode 100644 mvc3/src/SharedAssemblyInfo.cs rename {mvc3/src => src}/Ninject.Web.Mvc/Filter/FilterContextParameter.cs (64%) create mode 100644 src/Ninject.Web.Mvc/Filter/INinjectFilter.cs rename {mvc3/src => src}/Ninject.Web.Mvc/Filter/NinjectFilter.cs (71%) rename {mvc3/src => src}/Ninject.Web.Mvc/Filter/NinjectFilterAttributeFilterProvider.cs (72%) rename {mvc3/src => src}/Ninject.Web.Mvc/Filter/NinjectFilterProvider.cs (59%) rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/AttributeValueSelector.cs (60%) rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/BindingRootExtensions.cs (72%) rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/FilterFilterBindingBuilder.cs (95%) rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/IConstructorArgumentSyntaxExtensions.cs (68%) create mode 100644 src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingInNamedWithOrOnSyntax.cs rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingInSyntax.cs (74%) create mode 100644 src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedSyntax.cs create mode 100644 src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedWithOrOnSyntax.cs rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingOnSyntax.cs (71%) create mode 100644 src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWhenInNamedWithOrOnSyntax.cs rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWhenSyntax.cs (84%) create mode 100644 src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWithOrOnSyntax.cs rename {mvc3/src => src}/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWithSyntax.cs (88%) create mode 100644 src/Ninject.Web.Mvc/MvcModule.cs create mode 100644 src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj rename {mvc3/src => src}/Ninject.Web.Mvc/NinjectDependencyResolver.cs (66%) rename {mvc3/src => src}/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs (72%) rename {mvc3/src => src}/Ninject.Web.Mvc/Validation/NinjectDataAnnotationsModelValidatorProvider.cs (70%) create mode 100644 src/Ninject.Web.Mvc/stylecop.json rename {mvc1/src => src}/Ninject.snk (100%) rename {mvc3/src => src}/SampleApplication/Areas/SampleArea/Controllers/AreaTestController.cs (100%) rename {mvc2/src => src}/SampleApplication/Areas/SampleArea/SampleAreaAreaRegistration.cs (100%) rename {mvc3/src => src}/SampleApplication/Areas/SampleArea/Views/AreaTest/Index.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Areas/SampleArea/Views/Web.config (90%) rename {mvc2/src => src}/SampleApplication/Content/Site.css (100%) rename {mvc3/src => src}/SampleApplication/Controllers/AsyncControllerInjectionExample/HomeController.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/ControllerInjectionExample/AccountController.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/CacheAttribute.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/ClearCacheOnSuccessAttribute.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/DistributedCacheFilter.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/FilterInjectionModule.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/LogAttribute.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/LogFilter.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/FilterInjectionExamples/MovieController.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/ViewInjectionExample/InjectedWebViewPage.cs (100%) rename {mvc3/src => src}/SampleApplication/Controllers/ViewInjectionExample/MathController.cs (100%) rename {mvc1/src => src}/SampleApplication/Global.asax (100%) rename {mvc3/src => src}/SampleApplication/Global.asax.cs (98%) rename {mvc2/src => src}/SampleApplication/Models/Account/AccountValidationErrorMessages.cs (100%) rename {mvc2/src => src}/SampleApplication/Models/Account/ChangePasswordModel.cs (100%) rename {mvc3/src => src}/SampleApplication/Models/Account/CompareAttribute.cs (100%) rename {mvc2/src => src}/SampleApplication/Models/Account/LogOnModel.cs (100%) rename {mvc2/src => src}/SampleApplication/Models/Account/RegisterModel.cs (100%) rename {mvc3/src => src}/SampleApplication/Models/Account/ValidatePasswordLengthAttribute.cs (100%) rename {mvc3/src => src}/SampleApplication/Models/Movie/Movies.Designer.cs (96%) rename {mvc3/src => src}/SampleApplication/Models/Movie/Movies.edmx (80%) rename {mvc3/src => src}/SampleApplication/Models/Movie/Movies.edmx.sql (100%) rename {mvc3/src => src}/SampleApplication/Models/Movie/MoviesMetadata.cs (100%) rename {mvc3/src => src}/SampleApplication/Models/Movie/PriceRangeAttribute.cs (100%) rename {mvc3/src => src}/SampleApplication/Properties/AssemblyInfo.cs (100%) rename {mvc3/src => src}/SampleApplication/SampleApplication.Publish.xml (100%) rename {mvc3/src => src}/SampleApplication/SampleApplication.csproj (72%) rename {mvc3/src => src}/SampleApplication/Scripts/MicrosoftAjax.debug.js (100%) rename {mvc2/src => src}/SampleApplication/Scripts/MicrosoftAjax.js (100%) rename {mvc2/src => src}/SampleApplication/Scripts/MicrosoftMvcAjax.debug.js (100%) rename {mvc2/src => src}/SampleApplication/Scripts/MicrosoftMvcAjax.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/MicrosoftMvcValidation.debug.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/MicrosoftMvcValidation.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery-1.4.1-vsdoc.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery-1.4.1.js (100%) rename {mvc2/src => src}/SampleApplication/Scripts/jquery-1.4.1.min.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery.unobtrusive-ajax.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery.unobtrusive-ajax.min.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery.validate-vsdoc.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery.validate.js (100%) rename {mvc2/src => src}/SampleApplication/Scripts/jquery.validate.min.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery.validate.unobtrusive.js (100%) rename {mvc3/src => src}/SampleApplication/Scripts/jquery.validate.unobtrusive.min.js (100%) rename {mvc2/src => src}/SampleApplication/Services/Account/AccountMembershipService.cs (100%) rename {mvc1/src => src}/SampleApplication/Services/Account/AccountModule.cs (100%) rename {mvc1/src => src}/SampleApplication/Services/Account/FormsAuthenticationService.cs (100%) rename {mvc1/src => src}/SampleApplication/Services/Account/IFormsAuthenticationService.cs (100%) rename {mvc2/src => src}/SampleApplication/Services/Account/IMembershipService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/DistributedCacheService/DateTimeProvider.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/DistributedCacheService/DistributedCacheService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/DistributedCacheService/DistributedCacheServiceModule.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/DistributedCacheService/IDateTimeProvider.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/DistributedCacheService/IDistributedCacheService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/GenreService/GenreService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/GenreService/GenreServiceModule.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/GenreService/IGenreService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/MathService/IMathService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/MathService/MathService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/MathService/MathServiceModule.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/PriceingService/IPriceingService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/PriceingService/PriceingService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/PriceingService/PriceingServiceModule.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/WelcomeMessageService/IWelcomeMessageService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/WelcomeMessageService/WebSession.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/WelcomeMessageService/WelcomeMessageService.cs (100%) rename {mvc3/src => src}/SampleApplication/Services/WelcomeMessageService/WelcomeMessageServiceModule.cs (100%) rename {mvc3/src => src}/SampleApplication/Views/Account/ChangePassword.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Account/ChangePasswordSuccess.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Account/LogOn.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Account/Register.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Home/About.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Home/Index.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Math/Index.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Movie/Create.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Movie/Index.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Shared/Error.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Shared/_Layout.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Shared/_LogOnPartial.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Views/Web.config (81%) rename {mvc3/src => src}/SampleApplication/Views/_ViewStart.cshtml (100%) rename {mvc3/src => src}/SampleApplication/Web.Debug.config (100%) rename {mvc2/src => src}/SampleApplication/Web.Release.config (100%) create mode 100644 src/SampleApplication/Web.config create mode 100644 src/SampleApplication/packages.config rename {mvc3/src => src}/SampleApplication/web_mediumtrust.config (100%) delete mode 100644 tools/git/git.exe delete mode 100644 tools/git/libiconv2.dll delete mode 100644 tools/git/pthreadGC2.dll delete mode 100644 tools/nant/CollectionGen.dll delete mode 100644 tools/nant/ILMerge.NAntTasks.dll delete mode 100644 tools/nant/Interop.MsmMergeTypeLib.dll delete mode 100644 tools/nant/Interop.StarTeam.dll delete mode 100644 tools/nant/Interop.WindowsInstaller.dll delete mode 100644 tools/nant/MonoLinker.NAntTasks.dll delete mode 100644 tools/nant/MonoMerge.NAntTasks.dll delete mode 100644 tools/nant/NAnt.CompressionTasks.dll delete mode 100644 tools/nant/NAnt.CompressionTasks.xml delete mode 100644 tools/nant/NAnt.Contrib.Tasks.dll delete mode 100644 tools/nant/NAnt.Contrib.Tasks.xml delete mode 100644 tools/nant/NAnt.Core.dll delete mode 100644 tools/nant/NAnt.Core.xml delete mode 100644 tools/nant/NAnt.DotNetTasks.dll delete mode 100644 tools/nant/NAnt.DotNetTasks.xml delete mode 100644 tools/nant/NAnt.MSNetTasks.dll delete mode 100644 tools/nant/NAnt.MSNetTasks.xml delete mode 100644 tools/nant/NAnt.NUnit.dll delete mode 100644 tools/nant/NAnt.NUnit.xml delete mode 100644 tools/nant/NAnt.NUnit1Tasks.dll delete mode 100644 tools/nant/NAnt.NUnit1Tasks.xml delete mode 100644 tools/nant/NAnt.NUnit2Tasks.dll delete mode 100644 tools/nant/NAnt.NUnit2Tasks.xml delete mode 100644 tools/nant/NAnt.SourceControlTasks.dll delete mode 100644 tools/nant/NAnt.SourceControlTasks.xml delete mode 100644 tools/nant/NAnt.VSNetTasks.dll delete mode 100644 tools/nant/NAnt.VSNetTasks.xml delete mode 100644 tools/nant/NAnt.VisualCppTasks.dll delete mode 100644 tools/nant/NAnt.VisualCppTasks.xml delete mode 100644 tools/nant/NAnt.Win32Tasks.dll delete mode 100644 tools/nant/NAnt.Win32Tasks.xml delete mode 100644 tools/nant/NAnt.exe delete mode 100644 tools/nant/NAnt.exe.config delete mode 100644 tools/nant/NAnt.xml delete mode 100644 tools/nant/NDoc.Documenter.NAnt.dll delete mode 100644 tools/nant/SLiNgshoT.Core.dll delete mode 100644 tools/nant/SLiNgshoT.exe delete mode 100644 tools/nant/SourceSafe.Interop.dll delete mode 100644 tools/nant/SourceSafe.Interop.dll.VisualState.xml delete mode 100644 tools/nant/XUnit.NAntTasks.dll delete mode 100644 tools/nant/extensions/common/2.0/NAnt.MSBuild.dll delete mode 100644 tools/nant/extensions/common/2.0/NAnt.MSBuild.xml delete mode 100644 tools/nant/lib/common/1.1/nunit-console-runner.dll delete mode 100644 tools/nant/lib/common/1.1/nunit-console.exe delete mode 100644 tools/nant/lib/common/1.1/nunit.core.dll delete mode 100644 tools/nant/lib/common/1.1/nunit.framework.dll delete mode 100644 tools/nant/lib/common/1.1/nunit.util.dll delete mode 100644 tools/nant/lib/common/2.0/nunit-console-runner.dll delete mode 100644 tools/nant/lib/common/2.0/nunit-console.exe delete mode 100644 tools/nant/lib/common/2.0/nunit.core.dll delete mode 100644 tools/nant/lib/common/2.0/nunit.framework.dll delete mode 100644 tools/nant/lib/common/2.0/nunit.util.dll delete mode 100644 tools/nant/lib/common/neutral/ICSharpCode.SharpCvsLib.Console.dll delete mode 100644 tools/nant/lib/common/neutral/ICSharpCode.SharpCvsLib.dll delete mode 100644 tools/nant/lib/common/neutral/ICSharpCode.SharpZipLib.dll delete mode 100644 tools/nant/lib/common/neutral/NDoc.Core.dll delete mode 100644 tools/nant/lib/common/neutral/NDoc.Documenter.Msdn.dll delete mode 100644 tools/nant/lib/common/neutral/NDoc.ExtendedUI.dll delete mode 100644 tools/nant/lib/common/neutral/NUnitCore.dll delete mode 100644 tools/nant/lib/mono/1.0/NDoc.Core.dll delete mode 100644 tools/nant/lib/mono/1.0/NDoc.Documenter.Msdn.dll delete mode 100644 tools/nant/lib/mono/1.0/NDoc.ExtendedUI.dll delete mode 100644 tools/nant/lib/mono/1.0/nunit.core.dll delete mode 100644 tools/nant/lib/mono/1.0/nunit.framework.dll delete mode 100644 tools/nant/lib/mono/1.0/nunit.util.dll delete mode 100644 tools/nant/lib/mono/2.0/NDoc.Core.dll delete mode 100644 tools/nant/lib/mono/2.0/NDoc.Documenter.Msdn.dll delete mode 100644 tools/nant/lib/mono/2.0/NDoc.ExtendedUI.dll delete mode 100644 tools/nant/lib/mono/2.0/nunit.core.dll delete mode 100644 tools/nant/lib/mono/2.0/nunit.framework.dll delete mode 100644 tools/nant/lib/mono/2.0/nunit.util.dll delete mode 100644 tools/nant/lib/net/1.0/NDoc.Core.dll delete mode 100644 tools/nant/lib/net/1.0/NDoc.Documenter.Msdn.dll delete mode 100644 tools/nant/lib/net/1.0/NDoc.ExtendedUI.dll delete mode 100644 tools/nant/lib/net/1.0/nunit-console-runner.dll delete mode 100644 tools/nant/lib/net/1.0/nunit-console.exe delete mode 100644 tools/nant/lib/net/1.0/nunit.core.dll delete mode 100644 tools/nant/lib/net/1.0/nunit.framework.dll delete mode 100644 tools/nant/lib/net/1.0/nunit.util.dll delete mode 100644 tools/nant/lib/net/1.1/NDoc.Core.dll delete mode 100644 tools/nant/lib/net/1.1/NDoc.Documenter.Msdn.dll delete mode 100644 tools/nant/lib/net/1.1/NDoc.ExtendedUI.dll delete mode 100644 tools/nant/lib/net/1.1/nunit.core.dll delete mode 100644 tools/nant/lib/net/1.1/nunit.framework.dll delete mode 100644 tools/nant/lib/net/1.1/nunit.util.dll delete mode 100644 tools/nant/lib/net/2.0/NDoc.Core.dll delete mode 100644 tools/nant/lib/net/2.0/NDoc.Documenter.Msdn.dll delete mode 100644 tools/nant/lib/net/2.0/NDoc.ExtendedUI.dll delete mode 100644 tools/nant/lib/net/2.0/nunit.core.dll delete mode 100644 tools/nant/lib/net/2.0/nunit.framework.dll delete mode 100644 tools/nant/lib/net/2.0/nunit.util.dll delete mode 100644 tools/nant/log4net.dll delete mode 100644 tools/nant/scvs.exe delete mode 100644 tools/nant/xunit.dll delete mode 100644 tools/nant/xunit.runner.utility.dll delete mode 100644 tools/nuget/NuGet.exe diff --git a/.gitignore b/.gitignore index 546d748..96bb0ec 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,5 @@ -_ReSharper.* +.vs +*.user bin -Bin obj -build -dist -*.suo -*resharper* -*.user -*.cache -*.dotCover -lib/Ninject/*.zip -lib/Ninject/*/** -lib/Ninject.Web.Common/*.zip -lib/Ninject.Web.Common/*/** \ No newline at end of file +packages \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..0280b3d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] - 2017-10-19 + +### Removed +- Dropped support for ASP.NET MVC 1,2,3,4. \ No newline at end of file diff --git a/mvc3/Ninject.Web.Mvc.sln b/Ninject.Web.Mvc.sln similarity index 81% rename from mvc3/Ninject.Web.Mvc.sln rename to Ninject.Web.Mvc.sln index e7e3e8b..6b46d0f 100644 --- a/mvc3/Ninject.Web.Mvc.sln +++ b/Ninject.Web.Mvc.sln @@ -1,12 +1,16 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2002 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{77BE2A9F-F61F-45D4-A5C5-1DF0DA05EA42}" ProjectSection(SolutionItems) = preProject - README.markdown = README.markdown + appveyor.yml = appveyor.yml + CHANGELOG.md = CHANGELOG.md + README.md = README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ninject.Web.Mvc", "src\Ninject.Web.Mvc\Ninject.Web.Mvc.csproj", "{82222179-0EB8-4C43-AD48-6EA388349C64}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ninject.Web.Mvc", "src\Ninject.Web.Mvc\Ninject.Web.Mvc.csproj", "{82222179-0EB8-4C43-AD48-6EA388349C64}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApplication", "src\SampleApplication\SampleApplication.csproj", "{E511B69F-0BB7-4BD3-A69A-5B995173D666}" EndProject @@ -33,4 +37,7 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5C09CB2C-A1C3-4E87-B489-5D29E640DC86} + EndGlobalSection EndGlobal diff --git a/README.markdown b/README.markdown deleted file mode 100644 index f023fe3..0000000 --- a/README.markdown +++ /dev/null @@ -1,26 +0,0 @@ -This extension allows integration between the [Ninject core](http://github.com/ninject/ninject/) -and [ASP.NET MVC](http://www.asp.net/mvc/) projects. To use it, just make your HttpApplication -(typically in Global.asax.cs) extend NinjectHttpApplication: - - public class YourWebApplication : NinjectHttpApplication - { - public override void OnApplicationStarted() - { - // This is only needed in MVC1 - RegisterAllControllersIn("Some.Assembly.Name"); - } - - public override IKernel CreateKernel() - { - return new StandardKernel(new SomeModule(), new SomeOtherModule(), ...); - - // OR, to automatically load modules: - - var kernel = new StandardKernel(); - kernel.AutoLoadModules("~/bin"); - return kernel; - } - } - -Once you do this, your controllers will be activated via Ninject, meaning you can expose dependencies on -their constructors (or properties, or methods) to request injections. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..2324766 --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# Ninject.Web.Mvc + +[![Build status](https://ci.appveyor.com/api/projects/status/7af63sr9x1mwuhd8?svg=true)](https://ci.appveyor.com/project/Ninject/ninject-web-mvc) +[![NuGet Version](http://img.shields.io/nuget/v/Ninject.Mvc5.svg?style=flat)](https://www.nuget.org/packages/Ninject.Mvc5/) +[![NuGet Downloads](http://img.shields.io/nuget/dt/Ninject.Mvc5.svg?style=flat)](https://www.nuget.org/packages/Ninject.Mvc5/) + +This extension allows integration between the [Ninject](http://github.com/ninject/ninject/) +and [ASP.NET MVC](http://www.asp.net/mvc/) projects. To use it, just make your HttpApplication +(typically in Global.asax.cs) extend NinjectHttpApplication: + +```C# +public class YourWebApplication : NinjectHttpApplication +{ + public override void OnApplicationStarted() + { + // This is only needed in MVC1 + RegisterAllControllersIn("Some.Assembly.Name"); + } + + public override IKernel CreateKernel() + { + return new StandardKernel(new SomeModule(), new SomeOtherModule(), ...); + + // OR, to automatically load modules: + + var kernel = new StandardKernel(); + kernel.AutoLoadModules("~/bin"); + return kernel; + } +} +``` + +Once you do this, your controllers will be activated via Ninject, meaning you can expose dependencies on +their constructors (or properties, or methods) to request injections. \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..3d111f5 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,40 @@ +configuration: Release + +image: Visual Studio 2017 + +init: + - ps: >- + if ($env:APPVEYOR_REPO_TAG -eq "true") + { + Update-AppveyorBuild -Version "$env:APPVEYOR_REPO_TAG_NAME" + } + else + { + Update-AppveyorBuild -Version "3.3.0-ci.$($env:APPVEYOR_BUILD_NUMBER)+sha.$($env:APPVEYOR_REPO_COMMIT.substring(0,7))" + } + +dotnet_csproj: + patch: true + file: '**\*.csproj' + version: '{version}' + package_version: '{version}' + +cache: + - '%LocalAppData%\NuGet\v3-cache -> **\*.csproj' + +before_build: + - dotnet restore --verbosity quiet + +build: + parallel: true + verbosity: minimal + +artifacts: + - path: '**\*.nupkg' + +deploy: + provider: NuGet + api_key: + secure: Sn05A/FiUAlID5v31uaf5EZuYCSo4frLONtrCY+cwY265dU2JUZsl2+sjVeLQyz/ + on: + appveyor_repo_tag: true diff --git a/lib/Mvc1/System.Web.Mvc.dll b/lib/Mvc1/System.Web.Mvc.dll deleted file mode 100644 index fb8836398efb4393066fe5b2097c3e58c2f25ceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186176 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%0AIKF+Ezob@oiP#D>#vN#tj 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

F##i;i<;hdr`iUz6?L4?6FX&di>?U89^R&33Wd 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 diff --git a/lib/Mvc2/System.Web.Mvc.xml b/lib/Mvc2/System.Web.Mvc.xml deleted file mode 100644 index a98dde8..0000000 --- a/lib/Mvc2/System.Web.Mvc.xml +++ /dev/null @@ -1,8318 +0,0 @@ - - - - System.Web.Mvc - - - -

Represents an attribute that specifies which HTTP verbs an action method will respond to. - - - Initializes a new instance of the class by using a list of HTTP verbs that the action method will respond to. - The HTTP verbs that the action method will respond to. - The parameter is null or zero length. - - - Initializes a new instance of the class using the HTTP verbs that the action method will respond to. - The HTTP verbs that the action method will respond to. - - - Determines whether the specified method information is valid for the specified controller context. - true if the method information is valid; otherwise, false. - The controller context. - The method information. - The parameter is null. - - - Gets or sets the list of HTTP verbs that the action method will respond to. - The list of HTTP verbs that the action method will respond to. - - - Provides information about an action method, such as its name, controller, parameters, attributes, and filters. - - - Initializes a new instance of the class. - - - Gets the name of the action method. - The name of the action method. - - - Gets the controller descriptor. - The controller descriptor. - - - Executes the action method by using the specified parameters and controller context. - The result of executing the action method. - The controller context. - The parameters of the action method. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes of the specified type exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - The parameter is null. - - - Returns the filters that are associated with this action method. - The filters that are associated with this action method. - - - Returns the parameters of the action method. - The parameters of the action method. - - - Returns the action-method selectors. - The action-method selectors. - - - Determines whether one or more instances of the specified attribute type are defined for this member. - true if the is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The parameter is null. - - - Provides the context for the ActionExecuted method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The controller context. - The action method descriptor. - true if the action is canceled. - The exception object. - The parameter is null. - - - Gets or sets the action descriptor. - The action descriptor. - - - Gets or sets a value that indicates that this object is canceled. - true if the context canceled; otherwise, false. - - - Gets or sets the exception that occurred during the execution of the action method, if any. - The exception that occurred during the execution of the action method. - - - Gets or sets a value that indicates whether the exception is handled. - true if the exception is handled; otherwise, false. - - - Gets or sets the result returned by the action method. - The result returned by the action method. - - - Provides the context for the ActionExecuting method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified controller context, action descriptor, and action-method parameters. - The controller context. - The action descriptor. - The action-method parameters. - The or parameter is null. - - - Gets or sets the action descriptor. - The action descriptor. - - - Gets or sets the action-method parameters. - The action-method parameters. - - - Gets or sets the result that is returned by the action method. - The result that is returned by the action method. - - - Represents the base class for all action-filter attributes. - - - Initializes a new instance of the class. - - - Called by the MVC framework after the action method executes. - The filter context. - - - Called by the MVC framework before the action method executes. - The filter context. - - - Called by the MVC framework after the action result executes. - The filter context. - - - Called by the MVC framework before the action result executes. - The filter context. - - - Represents an attribute that is used to influence the selection of an action method. - - - Initializes a new instance of the class. - - - Determines whether the action method selection is valid for the specified controller context. - true if the action method selection is valid for the specified controller context; otherwise, false. - The controller context. - Information about the action method. - - - Represents an attribute that is used for the name of an action. - - - Initializes a new instance of the class. - Name of the action. - The parameter is null or empty. - - - Determines whether the action name is valid within the specified controller context. - true if the action name is valid within the specified controller context; otherwise, false. - The controller context. - The name of the action. - Information about the action method. - - - Gets or sets the name of the action. - The name of the action. - - - Represents an attribute that affects the selection of an action method. - - - Initializes a new instance of the class. - - - Determines whether the action name is valid in the specified controller context. - true if the action name is valid in the specified controller context; otherwise, false. - The controller context. - The name of the action. - Information about the action method. - - - Encapsulates the result of an action method and is used to perform a framework-level operation on behalf of the action method. - - - Initializes a new instance of the class. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context in which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - - - Represents a delegate that contains the logic for selecting an action method. - true if an action method was successfully selected; otherwise, false. - The current HTTP request context. - - - Represents support for rendering HTML in AJAX scenarios within a view. - - - Initializes a new instance of the class using the specified view context and view data container. - The view context. - The view data container. - One or both of the parameters is null. - - - Initializes a new instance of the class by using the specified view context, view data container, and route collection. - The view context. - The view data container. - The URL route collection. - One or more of the parameters is null. - - - Gets or sets the root path for the location to use for globalization script files. - The location of the folder where globalization script files are stored. The default location is "~/Scripts/Globalization". - - - Serializes the specified message and returns the resulting JSON-formatted string. - The serialized message as a JSON-formatted string. - The message to serialize. - - - Gets the collection of URL routes for the application. - The collection of routes for the application. - - - Gets the context information about the view. - The context of the view. - - - Gets the current view data dictionary. - The view data dictionary. - - - Gets the view data container. - The view data container. - - - Represents support for rendering HTML in AJAX scenarios within a strongly typed view. - The type of the model. - - - Initializes a new instance of the class by using the specified view context and view data container. - The view context. - The view data container. - - - Initializes a new instance of the class by using the specified view context, view data container, and URL route collection. - The view context. - The view data container. - The URL route collection. - - - Gets the strongly typed version of the view data dictionary. - The strongly typed data dictionary of the view. - - - Represents a class that extends the class by adding the ability to determine whether an HTTP request is an AJAX request. - - - Determines whether the specified HTTP request is an AJAX request. - true if the specified HTTP request is an AJAX request; otherwise, false. - The HTTP request. - The parameter is null (Nothing in Visual Basic). - - - Provides a way to register one or more areas in an ASP.NET MVC application. - - - Initializes a new instance of the class. - - - Gets the name of the area to be registered. - The name of the area to be registered. - - - Registers all areas in an ASP.NET MVC application. - - - Registers all areas in an ASP.NET MVC application by using the specified user-defined state information. - An object that contains user-defined information to pass to the area. - - - Registers an area in an ASP.NET MVC application using the specified area's context information. - Encapsulates the information that is required in order to register the area. - - - Encapsulates the information that is required in order to register an area within an ASP.NET MVC application. - - - Initializes a new instance of the class using the specified area name and routes collection. - The name of the area to register. - The collection of routes for the application. - - - Initializes a new instance of the class using the specified area name, routes collection, and user-defined data. - The name of the area to register. - The collection of routes for the application. - An object that contains user-defined information to pass to the area. - - - Gets the name of the area to register. - The name of the area to register. - - - Maps the specified URL route and associates it with the area that is specified by the property. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values and constraint. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify valid values for a URL parameter. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values, constraints, and namespaces. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify valid values for a URL parameter. - An enumerable set of namespaces for the application. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified route default values and namespaces. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An object that contains default route values. - An enumerable set of namespaces for the application. - The parameter is null. - - - Maps the specified URL route and associates it with the area that is specified by the property, using the specified namespaces. - A reference to the mapped route. - The name of the route. - The URL pattern for the route. - An enumerable set of namespaces for the application. - The parameter is null. - - - Gets the namespaces for the application. - An enumerable set of namespaces for the application. - - - Gets a collection of defined routes for the application. - A collection of defined routes for the application. - - - Gets an object that contains user-defined information to pass to the area. - An object that contains user-defined information to pass to the area. - - - Provides an abstract class to implement a metadata provider. - - - Called from constructors in a derived class to initialize the class. - - - When overridden in a derived class, creates the model metadata for the property. - The model metadata for the property. - The set of attributes. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - - - Gets a list of attributes. - A list of attributes. - The type of the container. - The property descriptor. - The attribute container. - - - Returns a list of properties for the model. - A list of properties for the model. - The model container. - The type of the container. - - - Returns the metadata for the specified property using the container type and property descriptor. - The metadata for the specified property. - The model accessor. - The type of the container. - The property descriptor. - - - Returns the metadata for the specified property using the container type and property name. - The metadata for the specified property. - The model accessor. - The type of the container. - The name of the property. - - - Returns the metadata for the specified property using the type of the model. - The metadata for the specified property. - The model accessor. - The type of the container. - - - Returns the type descriptor from the specified type. - The type descriptor. - The type. - - - Provides an abstract class for classes that implement a validation provider. - - - Called from constructors in derived classes to initialize the class. - - - Gets a type descriptor for the specified type. - A type descriptor for the specified type. - The type of the validation provider. - - - Gets the validators for the model using the metadata and controller context. - The validators for the model. - The metadata. - The controller context. - - - Gets the validators for the model using the metadata, the controller context, and a list of attributes. - The validators for the model. - The metadata. - The controller context. - The list of attributes. - - - Provides the base class for asynchronous controllers. - - - Initializes a new instance of the class. - - - Gets the asynchronous manager instance. - The asynchronous manager instance. - - - Called by ASP.NET to initialize asynchronous request processing. - The status of the asynchronous operation. - The request context. - The asynchronous callback method. - The state object. - - - Called by ASP.NET during initialization of asynchronous request processing. - The status of the asynchronous operation. - The asynchronous callback method. - The state object. - - - Creates an action invoker. - An action invoker. - - - Cancels the execution of an asynchronous action method. - The status of the asynchronous result. - - - Called by ASP.NET when the current asynchronous action has completed. - The status of the asynchronous result. - - - Called by ASP.NET to begin the execution of an asynchronous action method. - The status of the asynchronous operation. - The request context. - The asynchronous callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Cancels the execution of an asynchronous action method by ASP.NET at the end of the execution of an asynchronous action method. - The status of the asynchronous result. - - - Represents an attribute that is used to set the timeout value, in milliseconds, for an asynchronous method. - - - Initializes a new instance of the class. - The timeout value, in milliseconds. - - - Gets the timeout duration, in milliseconds. - The timeout duration, in milliseconds. - - - Called by ASP.NET before the asynchronous action method executes. - The filter context. - - - Encapsulates the information that is required for using an attribute. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified controller context. - The context within which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - - - Initializes a new instance of the class using the specified controller context and action descriptor. - The context in which the result is executed. The context information includes the controller, HTTP content, request context, and route data. - An object that provides information about an action method, such as its name, controller, parameters, attributes, and filters. - - - Provides information about the action method that is marked by the attribute, such as its name, controller, parameters, attributes, and filters. - The action descriptor for the action method that is marked by the attribute. - - - Gets or sets the result that is returned by an action method. - The result that is returned by an action method. - - - Represents an attribute that is used to restrict access by callers to an action method. - - - Initializes a new instance of the class. - - - Determines whether access to the core framework is authorized. - true if access is authorized; otherwise, false. - The HTTP context, which encapsulates all HTTP-specific information about an individual HTTP request. - The parameter is null. - - - Processes HTTP requests that fail authorization. - Encapsulates the information for using . The object contains the controller, HTTP context, request context, action result, and route data. - - - Called when a process requests authorization. - The filter context, which encapsulates information for using . - The parameter is null. - - - Called when the caching module requests authorization. - A reference to the validation status. - The HTTP context, which encapsulates all HTTP-specific information about an individual HTTP request. - The parameter is null. - - - Gets or sets the user roles. - The user roles. - - - Gets the unique identifier for this attribute. - The unique identifier for this attribute. - - - Gets or sets the authorized users. - The authorized users. - - - Represents an attribute that is used to provide details about how model binding to a parameter should occur. - - - Initializes a new instance of the class. - - - Gets or sets a comma-delimited list of property names for which binding is not allowed. - The exclude list. - - - Gets or sets a comma-delimited list of property names for which binding is allowed. - The include list. - - - Determines whether the specified property is allowed. - true if the specified property is allowed; otherwise, false. - The name of the property. - - - Gets or sets the prefix to use when markup is rendered for binding to an action argument or to a model property. - The prefix to use. - - - Maps a browser request to a byte array. - - - Initializes a new instance of the class. - - - Binds the model by using the specified controller context and binding context. - The bound data object. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The parameter is null. - - - Represents an attribute that is used to indicate that an action method should be called only as a child action. - - - Initializes a new instance of the class. - - - Called when authorization is required. - An object that encapsulates the information that is required in order to authorize access to the child action. - - - Returns the client data-type model validators. - - - Initializes a new instance of the class. - - - Returns the client data-type model validators. - The client data-type model validators. - The metadata. - The context. - - - Represents a user-defined content type that is the result of an action method. - - - Initializes a new instance of the class. - - - Gets or sets the content. - The content. - - - Gets or sets the content encoding. - The content encoding. - - - Gets or sets the type of the content. - The type of the content. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Provides methods that respond to HTTP requests that are made to an ASP.NET MVC Web site. - - - Initializes a new instance of the class. - - - Gets the action invoker for the controller. - The action invoker. - - - Gets or sets the binder. - The binder. - - - Creates a content result object by using a string. - The content result instance. - The content to write to the response. - - - Creates a content result object by using a string and the content type. - The content result instance. - The content to write to the response. - The content type (MIME type). - - - Creates a content result object by using a string, the content type, and content encoding. - The content result instance. - The content to write to the response. - The content type (MIME type). - The content encoding. - - - Creates an action invoker. - An action invoker. - - - Creates a temporary data provider. - A temporary data provider. - - - Releases all resources that are used by the current instance of the class. - - - Releases unmanaged resources and optionally releases managed resources. - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - Invokes the action in the current controller context. - - - Creates a object by using the file contents and file type. - The file-content result object. - The binary content to send to the response. - The content type (MIME type). - - - Creates a object by using the file contents, content type, and the destination file name. - The file-content result object. - The binary content to send to the response. - The content type (MIME type). - The file name to use in the file-download dialog box that is displayed in the browser. - - - Creates a object by using the object and content type. - The file-content result object. - The stream to send to the response. - The content type (MIME type). - - - Creates a object using the object, the content type, and the target file name. - The file-stream result object. - The stream to send to the response. - The content type (MIME type) - The file name to use in the file-download dialog box that is displayed in the browser. - - - Creates a object by using the file name and the content type. - The file-stream result object. - The path of the file to send to the response. - The content type (MIME type). - - - Creates a object by using the file name, the content type, and the file download name. - The file-stream result object. - The path of the file to send to the response. - The content type (MIME type). - The file name to use in the file-download dialog box that is displayed in the browser. - - - Called when a request matches this controller, but no method with the specified action name is found in the controller. - The name of the attempted action. - - - Gets HTTP-specific information about an individual HTTP request. - The HTTP context. - - - Initializes data that might not be available when the constructor is called. - The HTTP context and route data. - - - Creates a object. - The object that writes the script to the response. - The JavaScript code to run on the client - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON). - The JSON result object that serializes the specified object to JSON format. The result object that is prepared by this method is written to the response by the MVC framework when the object is executed. - The JavaScript object graph to serialize. - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format. - The JSON result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format. - The JSON result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - The content encoding. - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format using the content type, content encoding, and the JSON request behavior. - The result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - The content encoding. - The JSON request behavior - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format using the specified content type and JSON request behavior. - The result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - The JSON request behavior - - - Creates a object that serializes the specified object to JavaScript Object Notation (JSON) format using the specified JSON request behavior. - The result object that serializes the specified object to JSON format. - The JavaScript object graph to serialize. - The content type (MIME type). - - - Gets the model state dictionary object that contains the state of the model and of model-binding validation. - The model state dictionary. - - - Called after the action method is invoked. - Information about the current request and action. - - - Called before the action method is invoked. - Information about the current request and action. - - - Called when authorization occurs. - Information about the current request and action. - - - Called when an unhandled exception occurs in the action. - Information about the current request and action. - - - Called after the action result that is returned by an action method is executed. - Information about the current request and action result - - - Called before the action result that is returned by an action method is executed. - Information about the current request and action result - - - Creates a object that renders a partial view. - A partial-view result object. - - - Creates a object that renders a partial view, by using the specified model. - A partial-view result object. - The model that is rendered by the partial view - - - Creates a object that renders a partial view, by using the specified view name. - A partial-view result object. - The name of the view that is rendered to the response. - - - Creates a object that renders a partial view, by using the specified view name and model. - A partial-view result object. - The name of the view that is rendered to the response. - The model that is rendered by the partial view - - - Creates a object that redirects to the specified URL. - The redirect result object. - The URL to redirect to. - - - Redirects to the specified action using the action name. - The redirect result object. - The name of the action. - - - Redirects to the specified action using the action name and route values. - The redirect result object. - The name of the action. - The parameters for a route. - - - Redirects to the specified action using the action name and controller name. - The redirect result object. - The name of the action. - The name of the controller - - - Redirects to the specified action using the action name, controller name, and route values. - The redirect result object. - The name of the action. - The name of the controller - The parameters for a route. - - - Redirects to the specified action using the action name, controller name, and route dictionary. - The redirect result object. - The name of the action. - The name of the controller - The parameters for a route. - - - Redirects to the specified action using the action name and route dictionary. - The redirect result object. - The name of the action. - The parameters for a route. - - - Redirects to the specified route using the specified route values. - The redirect-to-route result object. - The parameters for a route. - - - Redirects to the specified route using the route name. - The redirect-to-route result object. - The name of the route - - - Redirects to the specified route using the route name and route values. - The redirect-to-route result object. - The name of the route - The parameters for a route. - - - Redirects to the specified route using the route name and route dictionary. - The redirect-to-route result object. - The name of the route - The parameters for a route. - - - Redirects to the specified route using the route dictionary. - The redirect-to-route result object. - The parameters for a route. - - - Gets the object for the current HTTP request. - The request object. - - - Gets the object for the current HTTP response. - The response object. - - - Gets the route data for the current request. - The route data. - - - Gets the object that provides methods that are used during Web request processing. - The HTTP server object. - - - Gets the object for the current HTTP request. - The HTTP session-state object for the current HTTP request. - - - This API supports the MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - This API supports the MVC infrastructure and is not intended to be used directly from your code. This method calls the method. - The filter context. - - - Gets the temporary-data provider object that is used to store data for the next request. - The temporary-data provider. - - - Updates the specified model instance using values from the controller's current value provider. - true if the update is successful; otherwise, false. - The model instance to update. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the controller's current value provider and a prefix. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, and included properties. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, a list of properties to exclude, and a list of properties to include. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the parameter list. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the value provider, a prefix, a list of properties to exclude , and a list of properties to include. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the parameter list. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, and included properties. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider and a prefix. - true if the update is successful; otherwise, false. - The model instance to update. - The prefix to use when looking up values in the value provider. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the controller's current value provider and included properties. - true if the update is successful; otherwise, false. - The model instance to update. - A list of properties of the model to update. - The type of the model object. - The parameter or the property is null. - - - Updates the specified model instance using values from the value provider and a list of properties to include. - true if the update is successful; otherwise, false. - The model instance to update. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider. - true if the update is successful; otherwise, false. - The model instance to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Validates the specified model instance. - true if the model validation is successful; otherwise, false. - The model instance to validate. - - - Validates the specified model instance using an HTML prefix. - true if the model validation is successful; otherwise, false. - The model to validate. - The prefix to use when looking up values in the model provider. - - - Updates the specified model instance using values from the controller's current value provider. - The model instance to update. - The type of the model object. - The model was not successfully updated. - - - Updates the specified model instance using values from the controller's current value provider and a prefix. - The model instance to update. - A prefix to use when looking up values in the value provider. - The type of the model object. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, and included properties. - The model instance to update. - A prefix to use when looking up values in the value provider. - A list of properties of the model to update. - The type of the model object. - - - Updates the specified model instance using values from the controller's current value provider, a prefix, a list of properties to exclude, and a list of properties to include. - The model instance to update. - A prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the list. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, a list of properties to exclude, and a list of properties to include. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A list of properties to explicitly exclude from the update. These are excluded even if they are listed in the parameter list. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, and a list of properties to include. - The model instance to update. - The prefix to use when looking up values in the value provider. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider and a prefix. - The model instance to update. - The prefix to use when looking up values in the value provider. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the controller object's current value provider. - The model instance to update. - A list of properties of the model to update. - The type of the model object. - - - Updates the specified model instance using values from the value provider, a prefix, and a list of properties to include. - The model instance to update. - A list of properties of the model to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Updates the specified model instance using values from the value provider. - The model instance to update. - A dictionary of values that is used to update the model. - The type of the model object. - - - Gets the URL helper object that is used to generate URLs by using routing. - The URL helper object. - - - Gets the user security information for the current HTTP request. - The user security information for the current HTTP request. - - - Validates the specified model instance. - The model to validate. - - - Validates the specified model instance using an HTML prefix. - The model to validate. - The prefix to use when looking up values in the model provider. - - - Creates a object that renders a view to the response. - The view result that renders a view to the response. - - - Creates a object by using the model that renders a view to the response. - The view result. - The model that is rendered by the view. - - - Creates a object by using the view name that renders a view. - The view result. - The name of the view that is rendered to the response. - - - Creates a object by using the view name and model that renders a view to the response. - The view result. - The name of the view that is rendered to the response. - The model that is rendered by the view. - - - Creates a object using the view name and master-page name that renders a view to the response. - The view result. - The name of the view that is rendered to the response. - The name of the master page or template to use when the view is rendered. - - - Creates a object using the view name, master-page name, and model that renders a view. - The view result. - The name of the view that is rendered to the response. - The name of the master page or template to use when the view is rendered. - The model that is rendered by the view. - - - Creates a object that renders the specified object. - The view result. - The view that is rendered to the response. - - - Creates a object that renders the specified object. - The view result. - The view that is rendered to the response. - The model that is rendered by the view. - - - Represents a class that is responsible for invoking the action methods of a controller. - - - Initializes a new instance of the class. - - - Gets or sets the model binders that are associated with the action. - The model binders that are associated with the action. - - - Creates the action result. - The action result object. - The controller context. - The action descriptor. - The action return value. - - - Finds the information about the action method. - Information about the action method. - The controller context. - The controller descriptor. - The name of the action. - - - Retrieves information about the controller by using the specified controller context. - Information about the controller. - The controller context. - - - Retrieves information about the action filters. - Information about the action filters. - The controller context. - The action descriptor. - - - Gets the value of the specified action-method parameter. - The value of the action-method parameter. - The controller context. - The parameter descriptor. - - - Gets the values of the action-method parameters. - The values of the action-method parameters. - The controller context. - The action descriptor. - - - Invokes the specified action by using the specified controller context. - The result of executing the action. - The controller context. - The name of the action to invoke. - The parameter is null. - The parameter is null or empty. - The thread was aborted during invocation of the action. - An unspecified error occurred during invocation of the action. - - - Invokes the specified action method by using the specified parameters and the controller context. - The result of executing the action method. - The controller context. - The action descriptor. - The parameters. - - - Invokes the specified action method by using the specified parameters, controller context, and action filters. - The context for the ActionExecuted method of the class. - The controller context. - The action filters. - The action descriptor. - The parameters. - - - Invokes the specified action result by using the specified controller context. - The controller context. - The action result. - - - Invokes the specified action result by using the specified action filters and the controller context. - The context for the ResultExecuted method of the class. - The controller context. - The action filters. - The action result. - - - Invokes the specified authorization filters by using the specified action descriptor and controller context. - The context for the object. - The controller context. - The authorization filters. - The action descriptor. - - - Invokes the specified exception filters by using the specified exception and controller context. - The context for the object. - The controller context. - The exception filters. - The exception. - - - Represents the base class for all MVC controllers. - - - Initializes a new instance of the class. - - - Gets or sets the controller context. - The controller context. - - - Executes the specified request context. - The request context. - The parameter is null. - - - Executes the request. - - - Initializes the specified request context. - The request context. - - - Executes the specified request context. - The request context. - - - Gets or sets the dictionary for temporary data. - The dictionary for temporary data. - - - Gets or sets a value that indicates whether request validation is enabled for this request. - true if request validation is enabled for this request; otherwise, false. The default is true. - - - Gets or sets the value provider for the controller. - The value provider for the controller. - - - Gets or sets the dictionary for view data. - The dictionary for the view data. - - - Represents a class that is responsible for dynamically building a controller. - - - Initializes a new instance of the class. - - - Gets the current controller builder object. - The current controller builder. - - - Gets the default namespaces. - The default namespaces. - - - Gets the associated controller factory. - The controller factory. - - - Sets the controller factory by using the specified type. - The type of the controller factory. - The parameter is null. - The controller factory cannot be assigned from the type in the parameter. - An error occurred while the controller factory was being set. - - - Sets the specified controller factory. - The controller factory. - The parameter is null. - - - Encapsulates information about an HTTP request that matches specified and instances. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified HTTP context, URL route data, and controller. - The HTTP context. - The route data. - The controller. - - - Initializes a new instance of the class by using the specified controller context. - The controller context. - The parameter is null. - - - Initializes a new instance of the class by using the specified request context and controller. - The request context. - The controller. - One or both parameters are null. - - - Gets or sets the controller. - The controller. - - - Gets or sets the HTTP context. - The HTTP context. - - - Gets a value that indicates whether the associated action method is a child action. - true if the associated action method is a child action; otherwise, false. - - - Gets an object that contains the view context information for the parent action method. - An object that contains the view context information for the parent action method. - - - Gets or sets the request context. - The request context. - - - Gets or sets the URL route data. - The URL route data. - - - Encapsulates information that describes a controller, such as its name, type, and actions. - - - Initializes a new instance of the class. - - - Gets the name of the controller. - The name of the controller. - - - Gets the type of the controller. - The type of the controller. - - - Finds an action method by using the specified name and controller context. - The information about the action method. - The controller context. - The name of the action. - - - Retrieves a list of action-method descriptors in the controller. - A list of action-method descriptors in the controller. - - - Retrieves custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Retrieves custom attributes of a specified type that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - The parameter is null (Nothing in Visual Basic). - - - Retrieves a value that indicates whether one or more instance of the specified custom attribute are defined for this member. - true if the is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The parameter is null (Nothing in Visual Basic). - - - Represents an attribute that invokes a custom model binder. - - - Initializes a new instance of the class. - - - Retrieves the associated model binder. - A reference to an object that implements the interface. - - - Provides a container for common metadata, for the class, and for the class for a data model. - - - Initializes a new instance of the class. - The data-annotations model metadata provider. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - The display column attribute. - - - Returns simple text for the model data. - Simple text for the model data. - - - Implements the default model metadata provider for ASP.NET MVC. - - - Initializes a new instance of the class. - - - Gets the metadata for the specified property. - The metadata for the property. - The attributes. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - - - Represents the method that creates a instance. - - - Provides a model validator. - - - Initializes a new instance of the class. - The metadata for the model. - The controller context for the model. - The validation attribute for the model. - - - Gets the validation attribute for the model validator. - The validation attribute for the model validator. - - - Gets the error message for the validation failure. - The error message for the validation failure. - - - Gets a value that indicates whether model validation is required. - true if model validation is required; otherwise, false. - - - Returns a list of validation error messages for the model. - A list of validation error messages for the model, or an empty list if no errors have occurred. - The container for the model. - - - Provides a model validator for a specified validation type. - - - - Initializes a new instance of the class. - The metadata for the model. - The controller context for the model. - The validation attribute for the model. - - - Gets the validation attribute from the model validator. - The validation attribute from the model validator. - - - Implements the default validation provider for MVC. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether non-nullable value types are required. - true if non-nullable value types are required; otherwise, false. - - - Gets a list of validators. - A list of validators. - The metadata. - The context. - The list of validation attributes. - - - Registers an adapter to provide client-side validation. - The type of the validation attribute. - The type of the adapter. - - - Registers an adapter factory for the validation provider. - The type of the attribute. - The factory that will be used to create the object for the specified attribute. - - - Registers the default adapter. - The type of the adapter. - - - Registers the default adapter factory. - The factory that will be used to create the object for the default adapter. - - - Provides a container for the error-information model validator. - - - Initializes a new instance of the class. - - - Gets a list of error-information model validators. - A list of error-information model validators. - The model metadata. - The controller context. - - - Represents the controller factory that is registered by default. - - - Initializes a new instance of the class. - - - Creates the specified controller by using the specified request context. - A reference to the controller. - The context of the HTTP request, which includes the HTTP context and route data. - The name of the controller. - The parameter is null. - The parameter is null or empty. - - - Retrieves the controller instance for the specified request context and controller type. - The controller instance. - The context of the HTTP request, which includes the HTTP context and route data. - The type of the controller. - - is null. - - cannot be assigned. - An instance of cannot be created. - - - Retrieves the controller type for the specified name and request context. - The controller type. - The context of the HTTP request, which includes the HTTP context and route data. - The name of the controller. - - - Releases the specified controller. - The controller to release. - - - Maps a browser request to a data object. This class provides a concrete implementation of a model binder. - - - Initializes a new instance of the class. - - - Gets or sets the model binders for the application. - The model binders for the application. - - - Binds the model by using the specified controller context and binding context. - The bound object. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The parameter is null. - - - Binds the specified property by using the specified controller context and binding context and the specified property descriptor. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property to be bound. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - - - Creates the specified model type by using the specified controller context and binding context. - A data object of the specified type. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The type of the model object to return. - - - Creates an index (a subindex) based on a category of components that make up a larger index, where the specified index value is an integer. - The name of the subindex. - The prefix for the subindex. - The index value. - - - Creates an index (a subindex) based on a category of components that make up a larger index, where the specified index value is a string. - The name of the subindex. - The prefix for the subindex. - The index value. - - - Creates the name of the subproperty by using the specified prefix and property name. - The name of the subproperty. - The prefix for the subproperty. - The name of the property. - - - Returns a set of properties that match the property filter restrictions that are established by the specified . - An enumerable set of property descriptors. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Returns the properties of the model by using the specified controller context and binding context. - A collection of property descriptors. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Returns the value of a property using the specified controller context, binding context, property descriptor, and property binder. - An object that represents the property value. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The descriptor for the property to access. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - An object that provides a way to bind the property. - - - Returns the descriptor object for a type that is specified by its controller context and binding context. - A custom type descriptor object. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Determines whether a data model is valid for the specified binding context. - true if the model is valid; otherwise, false. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - The parameter is null. - - - Called when the model is updated. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Called when the model is updating. - true if the model is updating; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Called when the specified property is validated. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property to be validated. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - The value to set for the property. - - - Called when the specified property is validating. - true if the property is validating; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property being validated. The descriptor provides information such as component type, property type, and property value. It also provides methods to get or set the property value. - The value to set for the property. - - - Gets or sets the name of the resource file (class key) that contains localized string values. - The name of the resource file (class key). - - - Sets the specified property by using the specified controller context, binding context, and property value. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - Describes a property to be set. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value. - The value to set for the property. - - - Represents a memory cache for view locations. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified cache time span. - The cache time span. - The Ticks attribute of the parameter is set to a negative number. - - - Retrieves the default view location by using the specified HTTP context and cache key. - The default view location. - The HTTP context. - The cache key - The parameter is null. - - - Inserts the view in the specified virtual path by using the specified HTTP context, cache key, and virtual path. - The HTTP context. - The cache key. - The virtual path - The parameter is null. - - - Creates an empty view location cache. - - - Gets or sets the cache time span. - The cache time span. - - - Represents the base class for value providers whose values come from a collection that implements the interface. - The type of the value. - - - Initializes a new instance of the class. - The name/value pairs that are used to initialize the value provider. - Information about a specific culture, such as the names of the culture, the writing system, and the calendar used. - The parameter is null. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - The parameter is null. - - - Returns a value object using the specified key and controller context. - The value object for the specified key. - The key of the value object to retrieve. - The parameter is null. - - - Provides an empty metadata provider for data models that do not require metadata. - - - Initializes a new instance of the class. - - - Creates a new instance of the class. - An empty instance of the model metadata. - The attributes. - The type of the container. - The model accessor. - The type of the model. - The name of the model. - - - Provides an empty validation provider for models that do not require a validator. - - - Initializes a new instance of the class. - - - Gets the empty model validator. - The empty model validator. - The metadata. - The context. - - - Represents a result that does nothing, such as a controller action method that returns nothing. - - - Initializes a new instance of the class. - - - Executes the specified result context. - The result context. - - - Provides the context for using the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class for the specified exception by using the specified controller context. - The controller context. - The exception. - The parameter is null. - - - Gets or sets the exception object. - The exception object. - - - Gets or sets a value that indicates whether the exception has been handled. - true if the exception has been handled; otherwise, false. - - - Gets or sets the action result. - The action result. - - - Provides a helper class to get the model name from an expression. - - - Gets the model name from a lambda expression. - The model name. - The expression. - - - Gets the model name from a string expression. - The model name. - The expression. - - - Provides a container for client-side field validation metadata. - - - Initializes a new instance of the class. - - - Gets or sets the name of the data field. - The name of the data field. - - - Gets or sets a value that indicates whether the validation message contents should be replaced with the client validation error. - true if the validation message contents should be replaced with the client validation error; otherwise, false. - - - Gets or sets the validator message ID. - The validator message ID. - - - Gets the client validation rules. - The client validation rules. - - - Sends the contents of a binary file to the response. - - - Initializes a new instance of the class by using the specified file contents and content type. - The byte array to send to the response. - The content type to use for the response. - The parameter is null (Nothing in Visual Basic). - - - The binary content to send to the response. - The file contents. - - - Writes the file content to the response. - The response. - - - Sends the contents of a file to the response. - - - Initializes a new instance of the class by using the specified file name and content type. - The name of the file to send to the response. - The content type of the response. - The parameter is null or empty. - - - Gets or sets the path of the file that is sent to the response. - The path of the file that is sent to the response. - - - Writes the file to the response. - The response. - - - Represents a base class that is used to send binary file content to the response. - - - Initializes a new instance of the class. - The type of the content. - The parameter is null or empty. - - - Gets the content type to use for the response. - The type of the content. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets the content-disposition header so that a file-download dialog box is displayed in the browser with the specified file name. - The name of the file. - - - Writes the file to the response. - The response. - - - Sends binary content to the response by using a instance. - - - Initializes a new instance of the class. - The stream to send to the response. - The content type to use for the response. - The parameter is null (Nothing in Visual Basic). - - - Gets the stream that will be sent to the response. - The file stream. - - - Writes the file to the response. - The response. - - - Represents the base class for action-filter attributes. - - - Initializes a new instance of the class. - - - Gets or sets the order in which the action filters are executed. - The order in which the action filters are executed. - - - Encapsulates information about the available action filters. - - - Initializes a new instance of the class. - - - Gets all the action filters in the application. - All action filters. - - - Gets all the authorization filters in the application. - The authorization filters. - - - Gets all the exception filters in the application. - The exception filters. - - - Gets all the result filters in the application. - The result filters. - - - Contains the form value providers for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The collection. - The parameter is null. - - - Gets the specified value provider. - The value provider. - The name of the value provider to get. - The parameter is null or empty. - - - Gets a value that indicates whether the value provider contains an entry that has the specified prefix. - true if the value provider contains an entry that has the specified prefix; otherwise, false. - The prefix to look for. - - - Gets a value from a value provider using the specified key. - A value from a value provider. - The key. - - - Returns a dictionary that contains the value providers. - A dictionary of value providers. - - - Encapsulates information that is required in order to validate and process the input data from an HTML form. - - - Initializes a new instance of the class. - - - Gets the field validators for the form. - A dictionary of field validators for the form. - - - Gets or sets the form identifier. - The form identifier. - - - Retrieves a serialized object that contains the form identifier and field-validation values for the form. - A serialized object that contains the form identifier and field-validation values for the form. - - - Retrieves the validation value for the specified input field. - The value to validate the field input with. - The name of the field to retrieve the validation value for. - The parameter is either null or empty. - - - Retrieves the validation value for the specified input field and a value that indicates what to do if the validation value is not found. - The value to validate the field input with. - The name of the field to retrieve the validation value for. - true to create a validation value if one is not found; otherwise, false. - The parameter is either null or empty. - - - Determines whether client validation errors should be dynamically added to the validation summary. - true if client validation errors should be added to the validation summary; otherwise, false. - - - Gets or sets the identifier for the validation summary. - The identifier for the validation summary. - - - Enumerates the HTTP request types for a form. - - - Specifies a GET request. - - - Specifies a POST request. - - - Represents a value provider for form values that are contained in a object. - - - Initializes a new instance of the class. - An object that encapsulates information about the current HTTP request. - - - Represents a class that is responsible for creating a new instance of a form-value provider object. - - - Initializes a new instance of the class. - - - Returns a form-value provider object for the specified controller context. - A form-value provider object. - An object that encapsulates information about the current HTTP request. - The parameter is null. - - - Represents an attribute that is used to handle an exception that is thrown by an action method. - - - Initializes a new instance of the class. - - - Gets or sets the type of the exception. - The type of the exception. - - - Gets or sets the master view for displaying exception information. - The master view. - - - Called when an exception occurs. - The action-filter context. - The parameter is null. - - - Gets the unique identifier for this attribute. - The unique identifier for this attribute. - - - Gets or sets the page view for displaying exception information. - The page view. - - - Encapsulates information for handling an error that was thrown by an action method. - - - Initializes a new instance of the class. - The exception. - The name of the controller. - The name of the action. - The parameter is null. - The or parameter is null or empty. - - - Gets or sets the name of the action that was executing when the exception was thrown. - The name of the action. - - - Gets or sets the name of the controller that contains the action method that threw the exception. - The name of the controller. - - - Gets or sets the exception object. - The exception object. - - - Represents an attribute that is used to indicate whether a property or field value should be rendered as a hidden input element. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether to display the value of the hidden input element. - true if the value should be displayed; otherwise, false. - - - Represents support for rendering HTML controls in a view. - - - Initializes a new instance of the class by using the specified view context and view data container. - The view context. - The view data container. - The or the parameter is null. - - - Initializes a new instance of the class by using the specified view context, view data container, and route collection. - The view context. - The view data container. - The route collection. - One or more parameters is null. - - - Generates a hidden form field (anti-forgery token) that is validated when the form is submitted. - The generated form field (anti-forgery token). - - - Generates a hidden form field (anti-forgery token) that is validated when the form is submitted. The field value is generated using the specified salt value. - The generated form field (anti-forgery token). - The salt value, which can be any non-empty string. - - - Generates a hidden form field (anti-forgery token) that is validated when the form is submitted. The field value is generated using the specified salt value, domain, and path. - The generated form field (anti-forgery token). - The salt value, which can be any non-empty string. - The application domain. - The virtual path. - - - Converts the specified attribute object to an HTML-encoded string. - The HTML-encoded string. If the value parameter is null or empty, this method returns an empty string. - The object to encode. - - - Converts the specified attribute string to an HTML-encoded string. - The HTML-encoded string. If the value parameter is null or empty, this method returns an empty string. - The string to encode. - - - Enables input validation that is performed by using client script in the browser. - - - Converts the value of the specified object to an HTML-encoded string. - The HTML-encoded string. - The object to encode. - - - Converts the specified string to an HTML-encoded string. - The HTML-encoded string. - The string to encode. - - - Creates an HTML element ID using the specified element name. - The ID of the HTML element. - The name of the HTML element. - The parameter is null. - - - Creates an HTML element ID using the specified element name and a string that replaces dots in the name. - The ID of the HTML element. - The name of the HTML element. - The string that replaces dots (.) in the parameter. - The parameter or the parameter is null. - - - Generates an HTML anchor element (a element) that links to the specified action method, and enables the user to specify the communication protocol, name of the host, and a URL fragment. - An HTML element that links to the specified action method. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - The name of the action method. - The name of the controller. - The communication protocol, such as HTTP or HTTPS. If this parameter is null, the protocol defaults to HTTP. - The name of the host. - The fragment identifier. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Generates an HTML anchor element (a element) that links to the specified action method. - An HTML element that links to the specified action method. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Generates an HTML anchor element (a element) that links to the specified URL route, and enables the user to specify the communication protocol, name of the host, and a URL fragment. - An HTML element that links to the specified URL route. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - The communication protocol, such as HTTP or HTTPS. If this parameter is null, the protocol defaults to HTTP. - The name of the host. - The fragment identifier. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Generates an HTML anchor element (a element) that links to the specified URL route. - An HTML element that links to the specified URL route. - The context of the HTTP request. - The collection of URL routes. - The text caption to display for the link. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. - An object that contains the HTML attributes for the element. - - - Returns the HTTP method that handles form input (GET or POST) as a string. - The form method string, either "get" or "post". - The HTTP method that handles the form. - - - Returns the HTML input control type as a string. - The input type string ("checkbox", "hidden", "password", "radio", or "text"). - The enumerated input type. - - - Returns a hidden input element that identifies the override method for the specified HTTP data-transfer method that was used by the client. - The override method that uses the HTTP data-transfer method that was used by the client. - The HTTP data-transfer method that was used by the client (DELETE, HEAD, or PUT). - The parameter is not "PUT", "DELETE", or "HEAD". - - - Returns a hidden input element that identifies the override method for the specified verb that represents the HTTP data-transfer method used by the client. - The override method that uses the verb that represents the HTTP data-transfer method used by the client. - The verb that represents the HTTP data-transfer method used by the client. - The parameter is not "PUT", "DELETE", or "HEAD". - - - Gets or sets the character that replaces periods in the ID attribute of an element. - The character that replaces periods in the ID attribute of an element. - - - Gets or sets the collection of routes for the application. - The collection of routes for the application. - - - The name of the CSS class that is used to style an input field when a validation error occurs. - - - The name of the CSS class that is used to style an input field when the input is valid. - - - The name of the CSS class that is used to style the error message when a validation error occurs. - - - The name of the CSS class that is used to style the validation message when the input is valid. - - - The name of the CSS class that is used to style validation summary error messages. - - - The name of the CSS class that is used to style the validation summary when the input is valid. - - - Gets or sets the context information about the view. - The context of the view. - - - Gets the current view data dictionary. - The view data dictionary. - - - Gets or sets the view data container. - The view data container. - - - Represents support for rendering HTML controls in a strongly typed view. - The type of the model. - - - Initializes a new instance of the class by using the specified view context and view data container. - The view context. - The view data container. - - - Initializes a new instance of the class by using the specified view context, view data container, and route collection. - The view context. - The view data container. - The route collection. - - - Gets the strongly typed view data dictionary. - The strongly typed view data dictionary. - - - Represents an HTTP anti-forgery exception. - - - Initializes a new instance of the class by using a system-supplied message that describes the error. - - - Initializes a new instance of the class by using a specified message that describes the error. - The message that describes the exception. The caller of this constructor must make sure that this string has been localized for the current system culture. - - - Initializes a new instance of the class by using a specified error message and a reference to the inner exception that is the cause of this exception. - The message that describes the exception. The caller of this constructor must make sure that this string has been localized for the current system culture. - The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP DELETE requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP DELETE request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Represents a value provider to use with values that come from a collection of HTTP files. - - - Initializes a new instance of the class. - An object that encapsulates information about the current HTTP request. - - - Represents a class that is responsible for creating a new instance of an HTTP file collection value provider object. - - - Initializes a new instance of the class. - - - Returns a value provider object for the specified controller context. - An HTTP file collection value provider. - An object that encapsulates information about the HTTP request. - The parameter is null. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP GET requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP GET request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP POST requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP POST request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Binds a model to a posted file. - - - Initializes a new instance of the class. - - - Binds the model. - The bound value. - The controller context. - The binding context. - One or both parameters are null. - - - Represents an attribute that is used to restrict an action method so that the method handles only HTTP PUT requests. - - - Initializes a new instance of the class. - - - Determines whether a request is a valid HTTP PUT request. - true if the request is valid; otherwise, false. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - Encapsulates information about a method, such as its type, return type, and arguments. - - - Extends the class that contains the HTTP values that were sent by a client during a Web request. - - - Retrieves the HTTP data-transfer method override that was used by the client. - The HTTP data-transfer method override that was used by the client. - An object that contains the HTTP values that were sent by a client during a Web request. - The parameter is null. - The HTTP data-transfer method override was not implemented. - - - Represents the result of an unauthorized HTTP request. - - - Initializes a new instance of the class. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Enumerates the HTTP verbs. - - - Retrieves the information or entity that is identified by the URI of the request. - - - Posts a new entity as an addition to a URI. - - - Replaces an entity that is identified by a URI. - - - Requests that a specified URI be deleted. - - - Retrieves the message headers for the information or entity that is identified by the URI of the request. - - - Defines the methods that are used in an action filter. - - - Called after the action method executes. - The filter context. - - - Called before an action method executes. - The filter context. - - - Defines the contract for an action invoker, which is used to invoke an action in response to an HTTP request. - - - Invokes the specified action by using the specified controller context. - true if the action was found; otherwise, false. - The controller context. - The name of the action. - - - Defines the methods that are required for an authorization filter. - - - Called when authorization is required. - The filter context. - - - Defines the methods that are required for a controller. - - - Executes the specified request context. - The request context. - - - Defines the methods that are required for a controller factory. - - - Creates the specified controller by using the specified request context. - The controller. - The request context. - The name of the controller. - - - Releases the specified controller. - The controller. - - - Defines the methods that are required for an exception filter. - - - Called when an exception occurs. - The filter context. - - - Defines the methods that are required for a model binder. - - - Binds the model to a value by using the specified controller context and binding context. - The bound value. - The controller context. - The binding context. - - - Enumerates the types of input controls. - - - A check box. - - - A hidden field. - - - A password box. - - - A radio button. - - - A text box. - - - Defines the methods that are required for a result filter. - - - Called after an action result executes. - The filter context. - - - Called before an action result executes. - The filter context. - - - Associates a route with an area in an ASP.NET MVC application. - - - Gets the name of the area to associate the route with. - The name of the area to associate the route with. - - - Defines the contract for temporary-data providers that store data that is viewed on the next request. - - - Loads the temporary data. - The temporary data. - The controller context. - - - Saves the temporary data. - The controller context. - The values. - - - Defines the methods that are required for a value provider in ASP.NET MVC. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - - - Retrieves a value object using the specified key. - The value object for the specified key. - The key of the value object to retrieve. - - - Defines the methods that are required for a view. - - - Renders the specified view context by using the specified the writer object. - The view context. - The writer object. - - - Defines the methods that are required for a view data dictionary. - - - Gets or sets the view data dictionary. - The view data dictionary. - - - Defines the methods that are required for a view engine. - - - Finds the specified partial view by using the specified controller context. - The partial view. - The controller context. - The name of the partial view. - true to specify that the view engine returns the cached view, if a cached view exists; otherwise, false. - - - Finds the specified view by using the specified controller context. - The page view. - The controller context. - The name of the view. - The name of the master. - true to specify that the view engine returns the cached view, if a cached view exists; otherwise, false. - - - Releases the specified view by using the specified controller context. - The controller context. - The view. - - - Defines the methods that are required in order to cache view locations in memory. - - - Gets the view location by using the specified HTTP context and the cache key. - The view location. - The HTTP context. - The cache key. - - - Inserts the specified view location into the cache by using the specified HTTP context and the cache key. - The HTTP context. - The cache key. - The virtual path. - - - Sends JavaScript content to the response. - - - Initializes a new instance of the class. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets the script. - The script. - - - Specifies whether HTTP GET requests from the client are allowed. - - - HTTP GET requests from the client are allowed. - - - HTTP GET requests from the client are not allowed. - - - Represents a class that is used to send JSON-formatted content to the response. - - - Initializes a new instance of the class. - - - Gets or sets the content encoding. - The content encoding. - - - Gets or sets the type of the content. - The type of the content. - - - Gets or sets the data. - The data. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets a value that indicates whether HTTP GET requests from the client are allowed. - A value that indicates whether HTTP GET requests from the client are allowed. - - - Maps a browser request to a LINQ object. - - - Initializes a new instance of the class. - - - Binds the model by using the specified controller context and binding context. - The bound data object. If the model cannot be bound, this method returns null. - The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data. - The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider. - - - Represents an attribute that is used to associate a model type to a model-builder type. - - - Initializes a new instance of the class. - The type of the binder. - The parameter is null. - - - Gets or sets the type of the binder. - The type of the binder. - - - Retrieves an instance of the model binder. - A reference to an object that implements the interface. - An error occurred while an instance of the model binder was being created. - - - Represents a class that contains all model binders for the application, listed by binder type. - - - Initializes a new instance of the class. - - - Adds the specified item to the model binder dictionary. - The object to add to the instance. - The object is read-only. - - - Adds the specified item to the model binder dictionary using the specified key. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the same key already exists in the object. - - - Removes all items from the model binder dictionary. - The object is read-only. - - - Determines whether the model binder dictionary contains a specified value. - true if is found in the model binder dictionary; otherwise, false. - The object to locate in the object. - - - Determines whether the model binder dictionary contains an element that has the specified key. - true if the model binder dictionary contains an element that has the specified key; otherwise, false. - The key to locate in the object. - - is null. - - - Copies the elements of the model binder dictionary to an array, starting at a specified index. - The one-dimensional array that is the destination of the elements copied from . The array must have zero-based indexing. - The zero-based index in at which copying starts. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source object is greater than the available space from to the end of the destination array. -or- Type cannot be cast automatically to the type of the destination array. - - - Gets the number of elements in the model binder dictionary. - The number of elements in the model binder dictionary. - - - Gets or sets the default model binder. - The default model binder. - - - Retrieves the model binder for the specified type. - The model binder. - The type of the model to retrieve. - The parameter is null. - - - Retrieves the model binder for the specified type or retrieves the default model binder. - The model binder. - The type of the model to retrieve. - true to retrieve the default model binder. - The parameter is null. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets a value that indicates whether the model binder dictionary is read-only. - true if the model binder dictionary is read-only; otherwise, false. - - - Gets or sets the specified key in an object that implements the interface. - The key for the specified item. - The item key. - - - Gets a collection that contains the keys in the model binder dictionary. - A collection that contains the keys in the model binder dictionary. - - - Removes the first occurrence of the specified element from the model binder dictionary. - true if was successfully removed from the model binder dictionary; otherwise, false. This method also returns false if is not found in the model binder dictionary. - The object to remove from the object. - The object is read-only. - - - Removes the element that has the specified key from the model binder dictionary. - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the model binder dictionary. - The key of the element to remove. - The object is read-only. - - is null. - - - Returns an enumerator that can be used to iterate through a collection. - An enumerator that can be used to iterate through the collection. - - - Gets the value that is associated with the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the 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 parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in the model binder dictionary. - A collection that contains the values in the model binder dictionary. - - - Provides global access to the model binders for the application. - - - Gets the model binders for the application. - The model binders for the application. - - - Provides the context in which a model binder functions. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the binding context. - The binding context. - - - Gets or sets a value that indicates whether the binder should use an empty prefix. - true if the binder should use an empty prefix; otherwise, false. - - - Gets or sets the model. - The model. - - - Gets or sets the model metadata. - The model metadata. - - - Gets or sets the name of the model. - The name of the model. - - - Gets or sets the state of the model. - The state of the model. - - - Gets or sets the type of the model. - The type of the model. - - - Gets or sets the property filter. - The property filter. - - - Gets the property metadata. - The property metadata. - - - Gets or sets the value provider. - The value provider. - - - Provides a container for a range-validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The error message. - The minimum value. - The maximum value. - - - Provides a container for a regular-expression client validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The error message to display when the regular expression validation fails. - The regular expression. - - - Provides a container for client validation for required field. - - - Initializes a new instance of the class. - The error message to display when a value for the required field is not provided. - - - Provides a base class container for a client validation rule that is sent to the browser. - - - Initializes a new instance of the class. - - - Gets or sets the error message for the client validation rule. - The error message for the client validation rule. - - - Gets the list of validation parameters. - A list of validation parameters. - - - Gets or sets the validation type. - The validation type. - - - Provides a container for a string-length validation rule that is sent to the browser. - - - Initializes a new instance of the class. - The validation error message. - The minimum length of the string. - The maximum length of the string. - - - Represents an error that occurs during model binding. - - - Initializes a new instance of the class by using the specified exception. - The exception. - The parameter is null. - - - Initializes a new instance of the class by using the specified exception and error message. - The exception. - The error message. - The parameter is null. - - - Initializes a new instance of the class by using the specified error message. - The error message. - - - Gets or sets the error message. - The error message. - - - Gets or sets the exception object. - The exception object. - - - A collection of instances. - - - Initializes a new instance of the class. - - - Adds the specified object to the model-error collection. - The exception. - - - Adds the specified error message to the model-error collection. - The error message. - - - Provides a container for common metadata, for the class, and for the class for a data model. - - - Initializes a new instance of the class. - The provider. - The type of the container. - The model accessor. - The type of the model. - The name of the property. - - - Gets a dictionary that contains additional metadata about the model. - A dictionary that contains additional metadata about the model. - - - Gets or sets the type of the container for the model. - The type of the container for the model. - - - Gets or sets a value that indicates whether empty strings that are posted back in forms should be converted to null. - true if empty strings that are posted back in forms should be converted to null; otherwise, false. The default value is true. - - - Gets or sets meta information about the data type. - Meta information about the data type. - - - Gets or sets the description of the model. - The description of the model. The default value is null. - - - Gets or sets the display format string for the model. - The display format string for the model. - - - Gets or sets the display name of the model. - The display name of the model. - - - Gets or sets the edit format string of the model. - The edit format string of the model. - - - Gets the metadata from the parameter for the model. - The metadata for the model. - An expression that identifies the model. - The view data dictionary. - The type of the parameter. - The type of the value. - - - Gets the metadata from the expression parameter for the model. - The metadata for the model. - An expression that identifies the model. - The view data dictionary. - - - Gets the display name for the model. - The display name for the model. - - - Returns the simple description of the model. - The simple description of the model. - - - Gets a list of validators for the model. - A list of validators for the model. - The controller context. - - - Gets or sets a value that indicates whether the model object should be rendered using associated HTML elements. - true if the associated HTML elements that contains the model object should be included with the object; otherwise, false. - - - Gets or sets a value that indicates whether the model is a complex type. - A value that indicates whether the model is considered a complex type by the MVC framework. - - - Gets a value that indicates whether the type is nullable. - true if the type is nullable; otherwise, false. - - - Gets or sets a value that indicates whether the model is read-only. - true if the model is read-only; otherwise, false. - - - Gets or sets a value that indicates whether the model is required. - true if the model is required; otherwise, false. - - - Gets the value of the model. - The value of the model. For more information about , see the entry ASP.NET MVC 2 Templates, Part 2: ModelMetadata on Brad Wilson's blog - - - Gets the type of the model. - The type of the model. - - - Gets or sets the string to display for null values. - The string to display for null values. - - - Gets a collection of model metadata objects that describe the properties of the model. - A collection of model metadata objects that describe the properties of the model. - - - Gets the property name. - The property name. - - - Gets or sets the provider. - The provider. - - - Gets or sets a short display name. - The short display name. - - - Gets or sets a value that indicates whether the property should be displayed in read-only views such as list and detail views. - true if the model should be displayed in read-only views; otherwise, false. - - - Gets or sets a value that indicates whether the model should be displayed in editable views. - true if the model should be displayed in editable views; otherwise, false. - - - Gets or sets the simple display string for the model. - The simple display string for the model. - - - Gets or sets a hint that suggests what template to use for this model. - A hint that suggests what template to use for this model. - - - Gets or sets a value that can be used as a watermark. - The watermark. - - - Provides an abstract base class for a custom metadata provider. - - - When overridden in a derived class, initializes a new instance of the object that derives from the class. - - - Gets a object for each property of a model. - A object for each property of a model. - The container. - The type of the container. - - - Gets metadata for the specified property. - The metadata model for the specified property. - The model accessor. - The type of the container. - The property to get the metadata model for. - - - Gets metadata for the specified model accessor and model type. - The metadata. - The model accessor. - They type of the model. - - - Provides a container for the current instance. - - - Gets or sets the current object. - The current object. - - - Encapsulates the state of model binding to a property of an action-method argument, or to the argument itself. - - - Initializes a new instance of the class. - - - Returns a object that contains any errors that occurred during model binding. - The errors. - - - Returns a object that encapsulates the value that was being bound during model binding. - The value. - - - Represents the state of an attempt to bind a posted form to an action method, which includes validation information. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using values that are copied from the specified model-state dictionary. - The model-state dictionary. - The parameter is null. - - - Adds the specified item to the model-state dictionary. - The object to add to the model-state dictionary. - The model-state dictionary is read-only. - - - Adds an element that has the specified key and value to the model-state dictionary. - The key of the element to add. - The value of the element to add. - The model-state dictionary is read-only. - - is null. - An element that has the specified key already occurs in the model-state dictionary. - - - Adds the specified model error to the errors collection for the model-state dictionary that is associated with the specified key. - The key. - The exception. - - - Adds the specified error message to the errors collection for the model-state dictionary that is associated with the specified key. - The key. - The error message. - - - Removes all items from the model-state dictionary. - The model-state dictionary is read-only. - - - Determines whether the model-state dictionary contains a specific value. - true if is found in the model-state dictionary; otherwise, false. - The object to locate in the model-state dictionary. - - - Determines whether the model-state dictionary contains the specified key. - true if the model-state dictionary contains the specified key; otherwise, false. - The key to locate in the model-state dictionary. - - - Copies the elements of the model-state dictionary to an array, starting at a specified index. - The one-dimensional array that is the destination of the elements copied from the object. The array must have zero-based indexing. - The zero-based index in at which copying starts. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source collection is greater than the available space from to the end of the destination .-or- Type cannot be cast automatically to the type of the destination . - - - Gets the number of key/value pairs in the collection. - The number of key/value pairs in the collection. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets a value that indicates whether the collection is read-only. - true if the collection is read-only; otherwise, false. - - - Gets a value that indicates whether this instance of the model-state dictionary is valid. - true if this instance is valid; otherwise, false. - - - Determines whether there are any objects that are associated with or prefixed with the specified key. - true if the model-state dictionary contains a value that is associated with the specified key; otherwise, false. - The key. - The parameter is null. - - - Gets or sets the value that is associated with the specified key. - The model state item. - The key. - - - Gets a collection that contains the keys in the dictionary. - A collection that contains the keys of the model-state dictionary. - - - Copies the values from the specified object into this dictionary, overwriting existing values if keys are the same. - The dictionary. - - - Removes the first occurrence of the specified object from the model-state dictionary. - true if was successfully removed the model-state dictionary; otherwise, false. This method also returns false if is not found in the model-state dictionary. - The object to remove from the model-state dictionary. - The model-state dictionary is read-only. - - - Removes the element that has the specified key from the model-state dictionary. - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the model-state dictionary. - The key of the element to remove. - The model-state dictionary is read-only. - - is null. - - - Sets the value for the specified key by using the specified value provider dictionary. - The key. - The value. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Attempts to gets the value that is associated with the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the 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 parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in the dictionary. - A collection that contains the values of the model-state dictionary. - - - Provides a container for a validation result. - - - Initializes a new instance of the class. - - - Gets or sets the name of the member. - The name of the member. - - - Gets or sets the validation result message. - The validation result message. - - - Provides a base class for implementing validation logic. - - - Called from constructors in derived classes to initialize the class. - The metadata. - The controller context. - - - Gets the controller context. - The controller context. - - - When implemented in a derived class, returns metadata for client validation. - The metadata for client validation. - - - Returns a composite model validator for the model. - A composite model validator for the model. - The metadata. - The controller context. - - - Gets or sets a value that indicates whether a model property is required. - true if the model property is required; otherwise, false. - - - Gets the metadata for the model validator. - The metadata for the model validator. - - - When implemented in a derived class, validates the object. - A list of validation results. - The container. - - - Provides a list of validators for a model. - - - When implemented in a derived class, initializes a new instance of the class. - - - Gets a list of validators. - A list of validators. - The metadata. - The context. - - - Provides a container for a list of validation providers. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using a list of model-validation providers. - A list of model-validation providers. - - - Returns the list of model validators. - The list of model validators. - The model metadata. - The controller context. - - - Inserts a model-validator provider into the collection. - The zero-based index at which item should be inserted. - The model-validator provider object to insert. - - - Replaces the model-validator provider element at the specified index. - The zero-based index of the model-validator provider element to replace. - The new value for the model-validator provider element. - - - Provides a container for the current validation provider. - - - Gets the model validator provider collection. - The model validator provider collection. - - - Represents a list of items that users can select more than one item from. - - - Initializes a new instance of the class by using the specified items to include in the list. - The items. - The parameter is null. - - - Initializes a new instance of the class by using the specified items to include in the list and the selected values. - The items. - The selected values. - The parameter is null. - - - Initializes a new instance of the class by using the items to include in the list, the data value field, and the data text field. - The items. - The data value field. - The data text field. - The parameter is null. - - - Initializes a new instance of the class by using the items to include in the list, the data value field, the data text field, and the selected values. - The items. - The data value field. - The data text field. - The selected values. - The parameter is null. - - - Gets or sets the data text field. - The data text field. - - - Gets or sets the data value field. - The data value field. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets or sets the items in the list. - The items in the list. - - - Gets or sets the selected values. - The selected values. - - - Returns an enumerator can be used to iterate through a collection. - An enumerator that can be used to iterate through the collection. - - - Selects the controller that will handle an HTTP request. - - - Initializes a new instance of the class. - The request context. - The parameter is null. - - - Adds the version header by using the specified HTTP context. - The HTTP context. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The state of the asynchronous object. - - - Called by ASP.NET to begin asynchronous request processing using the base HTTP context. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The state of the asynchronous object. - - - Gets or sets a value that indicates whether the MVC response header is disabled. - true if the MVC response header is disabled; otherwise, false. - - - Called by ASP.NET when asynchronous request processing has ended. - The asynchronous result. - - - Gets a value that indicates whether another request can use the instance. - true if the instance is reusable; otherwise, false. - - - Contains the header name of the ASP.NET MVC version. - - - Processes the request by using the specified HTTP request context. - The HTTP context. - - - Processes the request by using the specified base HTTP request context. - The HTTP context. - - - Gets the request context. - The request context. - - - Called by ASP.NET to begin asynchronous request processing using the base HTTP context. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The data. - - - Called by ASP.NET when asynchronous request processing has ended. - The asynchronous result. - - - Gets a value that indicates whether another request can use the instance. - true if the instance is reusable; otherwise, false. - - - Enables processing of HTTP Web requests by a custom HTTP handler that implements the interface. - An object that provides references to the intrinsic server objects (for example, Request, Response, Session, and Server) that are used to service HTTP requests. - - - Represents an HTML-encoded string that should not be encoded again. - - - Initializes a new instance of the class. - The string to create. If no value is assigned, the object is created using an empty-string value. - - - Creates an HTML-encoded string using the specified text value. - An HTML-encoded string. - The value of the string to create . - - - Contains an empty HTML string. - - - Determines whether the specified string contains content or is either null or empty. - true if the string is null or empty; otherwise, false. - The string. - - - Returns an HTML-encoded string that represents the current object. - An HTML-encoded string that represents the current object. - - - Returns a string that represents the current object. - A string that represents the current object. - - - Verifies and processes an HTTP request. - - - Initializes a new instance of the class. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The HTTP context. - The asynchronous callback method. - The state. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The base HTTP context. - The asynchronous callback method. - The state. - - - Called by ASP.NET when asynchronous request processing has ended. - The asynchronous result. - - - Called by ASP.NET to begin asynchronous request processing. - The status of the asynchronous call. - The context. - The asynchronous callback method. - An object that contains data. - - - Called by ASP.NET when asynchronous request processing has ended. - The status of the asynchronous operations. - - - Verifies and processes an HTTP request. - The HTTP handler. - The HTTP context. - - - Creates an object that implements the IHttpHandler interface and gives it the request context. - - - Initializes a new instance of the class. - - - Retrieves the HTTP handler by using the specified HTTP context. - The HTTP handler. - The request context. - - - Retrieves the HTTP handler by using the specified request context. - The HTTP handler. - The request context. - - - Extends a NameValueCollection object so that the collection can be copied to a specified dictionary. - - - Copies the specified collection to the specified destination. - The collection. - The destination. - - - Copies the specified collection to the specified destination, and optionally replaces previous entries. - The collection. - The destination. - true to replace previous entries; otherwise, false. - - - Represents the base class for value providers whose values come from a object. - - - Initializes a new instance of the class. - A collection that contains the values that are used to initialize the provider. - An object that contains information about the target culture. - The parameter is null. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - The parameter is null. - - - Returns a value object using the specified key. - The value object for the specified key. - The key of the value object to retrieve. - The parameter is null. - - - Provides a convenience wrapper for the attribute. - - - Initializes a new instance of the class. - - - Represents an attribute that is used to indicate that a controller method is not an action method. - - - Initializes a new instance of the class. - - - Determines whether the attribute marks a method that is not an action method by using the specified controller context. - true if the attribute marks a valid non-action method; otherwise, false. - The controller context. - The method information. - - - Represents an attribute that is used to mark an action method whose output will be cached. - - - Initializes a new instance of the class. - - - Gets or sets the cache profile name. - The cache profile name. - - - Gets or sets the cache duration. - The cache duration. - - - Gets or sets the location. - The location. - - - Gets or sets a value that indicates whether to store the cache. - true if the cache should be stored; otherwise, false. - - - Called before the action result executes. - The filter context, which encapsulates information for using . - The parameter is null. - - - Gets or sets the SQL dependency. - The SQL dependency. - - - Gets or sets the vary-by-content encoding. - The vary-by-content encoding. - - - Gets or sets the vary-by-custom value. - The vary-by-custom value. - - - Gets or sets the vary-by-header value. - The vary-by-header value. - - - Gets or sets the vary-by-param value. - The vary-by-param value. - - - Encapsulates information for binding action-method parameters to a data model. - - - Initializes a new instance of the class. - - - Gets the model binder. - The model binder. - - - Gets a comma-delimited list of property names for which binding is disabled. - The exclude list. - - - Gets a comma-delimited list of property names for which binding is enabled. - The include list. - - - Gets the prefix to use when the MVC framework binds a value to an action parameter or to a model property. - The prefix. - - - Contains information that describes a parameter. - - - Initializes a new instance of the class. - - - Gets the action descriptor. - The action descriptor. - - - Gets the binding information. - The binding information. - - - Gets the default value of the parameter. - The default value of the parameter. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - The parameter is null. - - - Indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The parameter is null. - - - Gets the name of the parameter. - The name of the parameter. - - - Gets the type of the parameter. - The type of the parameter. - - - Represents a base class that is used to send a partial view to the response. - - - Initializes a new instance of the class. - - - Returns the object that is used to render the view. - The view engine result. - The controller context. - An error occurred while the method was attempting to find the view. - - - Represents a value provider for query strings that are contained in a object. - - - Initializes a new instance of the class. - An object that encapsulates information about the current HTTP request. - - - Represents a class that is responsible for creating a new instance of a query-string value-provider object. - - - Initializes a new instance of the class. - - - Returns a value-provider object for the specified controller context. - A query-string value-provider object. - An object that encapsulates information about the current HTTP request. - The parameter is null. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The range attribute. - - - Gets a list of client validation rules for a range check. - A list of client validation rules for a range check. - - - Controls the processing of application actions by redirecting to a specified URI. - - - Initializes a new instance of the class. - The target URL. - The parameter is null. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets the target URL. - The target URL. - - - Represents a result that performs a redirection by using the specified route values dictionary. - - - Initializes a new instance of the class by using the specified route name and route values. - The name of the route. - The route values. - - - Initializes a new instance of the class by using the specified route values. - The route values. - - - Enables processing of the result of an action method by a custom type that inherits from the class. - The context within which the result is executed. - The parameter is null. - - - Gets or sets the name of the route. - The name of the route. - - - Gets or sets the route values. - The route values. - - - Contains information that describes a reflected action method. - - - Initializes a new instance of the class. - The action-method information. - The name of the action. - The controller descriptor. - Either the or parameter is null. - The parameter is null or empty. - - - Gets the name of the action. - The name of the action. - - - Gets the controller descriptor. - The controller descriptor. - - - Executes the specified controller context by using the specified action-method parameters. - The action return value. - The controller context. - The parameters. - The or parameter is null. - - - Returns an array of custom attributes defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Retrieves information about action filters. - The filter information. - - - Retrieves the parameters of the action method. - The parameters of the action method. - - - Retrieves the action selectors. - The action selectors. - - - Indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Gets or sets the action-method information. - The action-method information. - - - Contains information that describes a reflected controller. - - - Initializes a new instance of the class. - The type of the controller. - The parameter is null. - - - Gets the type of the controller. - The type of the controller. - - - Finds the specified action for the specified controller context. - The information about the action. - The controller context. - The name of the action. - The parameter is null. - The parameter is null or empty. - - - Returns the list of actions for the controller. - A list of action descriptors for the controller. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns a value that indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Contains information that describes a reflected action-method parameter. - - - Initializes a new instance of the class. - The parameter information. - The action descriptor. - The or parameter is null. - - - Gets the action descriptor. - The action descriptor. - - - Gets the binding information. - The binding information. - - - Gets the default value of the reflected parameter. - The default value of the reflected parameter. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - The custom attribute type cannot be loaded. - There is more than one attribute of type defined for this member. - - - Returns a value that indicates whether one or more instances of a custom attribute type are defined for this member. - true if the custom attribute type is defined for this member; otherwise, false. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Gets or sets the parameter information. - The parameter information. - - - Gets the name of the parameter. - The name of the parameter. - - - Gets the type of the parameter. - The type of the parameter. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The regular expression attribute. - - - Gets a list of regular-expression client validation rules. - A list of regular-expression client validation rules. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The required attribute. - - - Gets a list of required-value client validation rules. - A list of required-value client validation rules. - - - Represents an attribute that forces an unsecured HTTP request to be re-sent over HTTPS. - - - Initializes a new instance of the class. - - - Handles unsecured HTTP requests that are sent to the action method. - An object that encapsulates information that is required in order to use the attribute. - The HTTP request contains an invalid transfer method override. All GET requests are considered invalid. - - - Determines whether a request is secured (HTTPS) and, if it is not, calls the method. - An object that encapsulates information that is required in order to use the attribute. - The parameter is null. - - - Provides the context for the method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The controller context. - The result object. - true to cancel execution; otherwise, false. - The exception object. - The parameter is null. - - - Gets or sets a value that indicates whether this instance is canceled. - true if the instance is canceled; otherwise, false. - - - Gets or sets the exception object. - The exception object. - - - Gets or sets a value that indicates whether the exception has been handled. - true if the exception has been handled; otherwise, false. - - - Gets or sets the action result. - The action result. - - - Provides the context for the method of the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified controller context and action result. - The controller context. - The action result. - The parameter is null. - - - Gets or sets a value that indicates whether this value is "cancel". - true if the value is "cancel"; otherwise, false. - - - Gets or sets the action result. - The action result. - - - Extends a object for MVC routing. - - - Returns an object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains the routes for the applications. - An object that encapsulates information about the requested route. - The name of the route to use when information about the URL path is retrieved. - An object that contains the parameters for a route. - - - Returns an object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains information about the route and virtual path that are the result of generating a URL in the current area. - An object that contains the routes for the applications. - An object that encapsulates information about the requested route. - An object that contains the parameters for a route. - - - Ignores the specified URL route for the given list of available routes. - A collection of routes for the application. - The URL pattern for the route to ignore. - The or parameter is null. - - - Ignores the specified URL route for the given list of the available routes and a list of constraints. - A collection of routes for the application. - The URL pattern for the route to ignore. - A set of expressions that specify values for the parameter. - The or parameter is null. - - - Maps the specified URL route. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - The or parameter is null. - - - Maps the specified URL route and sets default route values. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - The or parameter is null. - - - Maps the specified URL route and sets default route values and constraints. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify values for the parameter. - The or parameter is null. - - - Maps the specified URL route and sets default route values, constraints, and namespaces. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - A set of expressions that specify values for the parameter. - A set of namespaces for the application. - The or parameter is null. - - - Maps the specified URL route and sets default route values and namespaces. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - An object that contains default route values. - A set of namespaces for the application. - The or parameter is null. - - - Maps the specified URL route and sets the namespaces. - A reference to the mapped route. - A collection of routes for the application. - The name of the route to map. - The URL pattern for the route. - A set of namespaces for the application. - The or parameter is null. - - - Represents a value provider for route data that is contained in an object that implements the interface. - - - Initializes a new instance of the class. - An object that contain information about the HTTP request. - - - Represents a factory for creating route-data value provider objects. - - - Initialized a new instance of the class. - - - Returns a value-provider object for the specified controller context. - A value-provider object. - An object that encapsulates information about the current HTTP request. - The parameter is null. - - - Represents a list that lets users select one item. - - - Initializes a new instance of the class by using the specified items for the list. - The items. - - - Initializes a new instance of the class by using the specified items for the list and a selected value. - The items. - The selected value. - - - Initializes a new instance of the class by using the specified items for the list, the data value field, and the data text field. - The items. - The data value field. - The data text field. - - - Initializes a new instance of the class by using the specified items for the list, the data value field, the data text field, and a selected value. - The items. - The data value field. - The data text field. - The selected value. - - - Gets or sets the selected value. - The selected value. - - - Represents the selected item in an instance of the class. - - - Initializes a new instance of the class. - - - Gets or sets a value that indicates whether this is selected. - true if the item is selected; otherwise, false. - - - Gets or sets the text of the selected item. - The text. - - - Gets or sets the value of the selected item. - The value. - - - Provides session-state data to the current object. - - - Initializes a new instance of the class. - - - Loads the temporary data by using the specified controller context. - The temporary data. - The controller context. - An error occurred when the session context was being retrieved. - - - Saves the specified values in the temporary data dictionary by using the specified controller context. - The controller context. - The values. - An error occurred the session context was being retrieved. - - - Provides an adapter for the attribute. - - - Initializes a new instance of the class. - The model metadata. - The controller context. - The string-length attribute. - - - Gets a list of string-length client validation rules. - A list of string-length client validation rules. - - - Represents a class that is used by HTML helpers to build HTML elements. - - - Initializes a new instance of the class. - The name of the tag. - - - Adds the specified CSS class to the tag-builder attributes. - The CSS class value string. - - - Gets or sets the collection of attributes for the tag. - The collection of attributes for the tag. - - - Generates the id attribute for the tag by using the specified name. - The name to use to generate the id value. - - - Gets or sets the character that is used to replace the periods (dots) in the id attribute. - The character that is used to replace periods (dots) in the id attribute. - - - Gets or sets the inner HTML for the tag (element). - The inner HTML for the tag (element). - - - Adds an attribute to the tag by using the specified key/value pair. - The key. - The value. - The parameter is null or empty. - - - Adds an attribute to the tag by using the specified key/value pair. - The key. - The value. - true to replace the existing attribute. - The parameter is null or empty. - - - Adds an attribute to the specified collection of attributes for the tag. - The attributes. - The type of the key. - The type of the value. - - - Adds an attribute to the specified collection of attributes for the tag. - The attributes. - true to replace the existing attributes. - The type of the key. - The type of the value. - - - Sets the inner text of the tag (element). - The inner text for the tag (element). - - - Gets or sets the name of the tag. - The name of the tag. - - - Returns a string that represents the current object. - A string that represents the current object. - - - Returns a string that represents the current object by using the specified tag-render mode. - A string that represents the current object. - The tag-render mode. - - - Enumerates the modes that are available for rendering HTML tags. - - - Represents normal mode. - - - Represents the start-tag mode. - - - Represents end-tag mode. - - - Represents self-closing-tag mode. - - - Represents a set of data that persists only from one request to the next. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class. - The information. - The controller context. - - - Adds an element that has the specified key and value to the object. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the same key already exists in the object. - - - Removes all items from the instance. - The object is read-only. - - - Determines whether the instance contains an element that has the specified key. - true if the instance contains an element that has the specified key; otherwise, false. - The key to locate in the instance. - - is null. - - - Determines whether the dictionary contains the specified value. - true if the dictionary contains the specified value; otherwise, false. - The value. - - - Gets the number of elements in the object. - The number of elements in the object. - - - Gets the enumerator. - The enumerator. - - - Populates a class by using the data that is that is required to serialize the target object. - The object to populate with data. - The destination for this serialization. For more information, see . - The caller does not have the required permission. - - - Gets or sets the object that has the specified key. - The object that has the specified key. - The key to access. - - - Marks all keys in the dictionary for retention. - - - Marks the specified key in the dictionary for retention. - The key to retain in the dictionary. - - - Gets an object that contains the keys of elements in the object. - The keys of the elements in the object. - - - Loads the specified controller context by using the specified data provider. - The controller context. - The temporary data provider. - - - Returns an object that contains the element that is associated with the specified key, without marking the key for deletion. - An object that contains the element that is associated with the specified key. - The key of the element to return. - - - Removes the element that has the specified key from the object. - true if the element was removed successfully; otherwise, false. This method also returns false if was not found in the . instance. - The key of the element to remove. - The object is read-only. - - is null. - - - Saves the specified controller context by using the specified data provider. - The controller context. - The temporary data provider. - - - Adds the specified key/value pair to the dictionary. - The key/value pair. - - - Determines whether a sequence contains a specified element by using the default equality comparer. - true if the dictionary contains the specified key/value pair; otherwise, false. - The key/value pair to search for. - - - Copies a key/value pair to the specified array at the specified index. - The target array. - The index. - - - Gets a value that indicates whether the dictionary is read-only. - true if the dictionary is read-only; otherwise, false. - - - Deletes the specified key/value pair from the dictionary. - true if the key/value pair was removed successfully; otherwise, false. - The key/value pair. - - - Returns an enumerator that can be used to iterate through a collection. - An object that can be used to iterate through the collection. - - - Populates a object by using the data that is that is required to serialize the target object. - The object to populate with data. - The destination for this serialization. For more information, see . - The caller does not have the required permission. - - - Gets the value of the element that has the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the value to get. - When this method returns, the value that is associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets the object that contains the values in the object. - The values of the elements in the object that implements . - - - Encapsulates information about the current template context. - - - Initializes a new instance of the class. - - - Gets or sets the formatted model value. - The formatted model value. - - - Retrieves the full DOM ID of a field using the specified HTML name attribute. - The full DOM ID. - The value of the HTML name attribute. - - - Retrieves the fully qualified name (including a prefix) for a field using the specified HTML name attribute. - The prefixed name of the field. - The value of the HTML name attribute. - - - Gets or sets the HTML field prefix. - The HTML field prefix. - - - Contains the number of objects that were visited by the user. - The number of objects. - - - Determines whether the template has been visited by the user. - true if the template has been visited by the user; otherwise, false. - An object that encapsulates information that describes the model. - - - Contains methods to build URLs for ASP.NET MVC within an application. - - - Initializes a new instance of the class using the specified request context. - An object that contains information about the current request and about the route that it matched. - The parameter is null. - - - Initializes a new instance of the class by using the specified request context and route collection. - An object that contains information about the current request and about the route that it matched. - A collection of routes. - The or the parameter is null. - - - Generates a fully qualified URL to an action method by using the specified action name. - The fully qualified URL to an action method. - The name of the action method. - - - Generates a fully qualified URL to an action method by using the specified action name and route values. - The fully qualified URL to an action method. - The name of the action method. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL to an action method by using the specified action name and controller name. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - - - Generates a fully qualified URL to an action method by using the specified action name, controller name, and route values. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL to an action method by using the specified action name, controller name, route values, and protocol to use. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The protocol for the URL, such as "http" or "https". - - - Generates a fully qualified URL to an action method by using the specified action name, controller name, and route values. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - - - Generates a fully qualified URL for an action method by using the specified action name, controller name, route values, protocol to use, and host name. - The fully qualified URL to an action method. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - - - Generates a fully qualified URL to an action method for the specified action name and route values. - The fully qualified URL to an action method. - The name of the action method. - An object that contains the parameters for a route. - - - Converts a virtual (relative) path to an application absolute path. - The application absolute path. - The virtual path of the content. - - - Encodes special characters in a URL string into character-entity equivalents. - An encoded URL string. - The text to encode. - - - Returns a string that contains a content URL. - A string that contains a content URL. - The content path. - The HTTP context. - - - Returns a string that contains a URL. - A string that contains a URL. - The route name. - The action name. - The controller name. - The HTTP protocol. - The host name. - The fragment. - The route values. - The route collection. - The request context. - true to include implicit MVC values; otherwise false. - - - Returns a string that contains a URL. - A string that contains a URL. - The route name. - The action name. - The controller name. - The route values. - The route collection. - The request context. - true to include implicit MVC values; otherwise. false. - - - Gets information about an HTTP request that matches a defined route. - The request context. - - - Gets a collection that contains the routes that are registered for the application. - The route collection. - - - Generates a fully qualified URL for the specified route values. - The fully qualified URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL for the specified route name. - The fully qualified URL. - The name of the route that is used to generate the URL. - - - Generates a fully qualified URL for the specified route values by using a route name. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - - - Generates a fully qualified URL for the specified route values by using a route name and the protocol to use. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The protocol for the URL, such as "http" or "https". - - - Generates a fully qualified URL for the specified route values by using a route name. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. - - - Generates a fully qualified URL for the specified route values by using the specified route name, protocol to use, and host name. - The fully qualified URL. - The name of the route that is used to generate the URL. - An object that contains the parameters for a route. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - - - Generates a fully qualified URL for the specified route values. - The fully qualified URL. - An object that contains the parameters for a route. - - - Represents an optional parameter that is used by the class during routing. - - - Contains the read-only value for the optional parameter. - - - Represents an attribute that is used to detect whether a server request has been tampered with. - - - Initializes a new instance of the class. - - - Called when authorization is required. - The filter context. - The parameter is null. - - - Gets or sets the salt string. - The salt string. - - - Represents an attribute that is used to mark action methods whose input must be validated. - - - Initializes a new instance of the class. - true to enable validation. - - - Gets or sets a value that indicates whether to enable validation. - true if validation is enabled; otherwise, false. - - - Called when authorization is required. - The filter context. - The parameter is null. - - - Represents the collection of value-provider objects for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class and registers the specified value providers. - A list of value providers to register. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - - - Returns a value object using the specified key. - The value object for the specified key - The key of the value object to retrieve. - - - Inserts the specified value-provider object into the collection at the specified index location. - The zero-based index location at which to insert the value provider into the collection. - The value-provider object to insert. - The parameter is null. - - - Replaces the value provider at the specified index location with a new value provider. - The zero-based index of the element to replace. - The new value for the element at the specified index. - The parameter is null. - - - Represents a dictionary of value providers for the application. - - - Initializes a new instance of the class. - The controller context. - - - Adds the specified item to the collection of value providers. - The object to add to the object. - The object is read-only. - - - Adds an element that has the specified key and value to the collection of value providers. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the specified key already exists in the object. - - - Adds an element that has the specified key and value to the collection of value providers. - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element that has the specified key already exists in the object. - - - Removes all items from the collection of value providers. - The object is read-only. - - - Determines whether the collection of value providers contains the specified item. - true if is found in the collection of value providers; otherwise, false. - The object to locate in the instance. - - - Determines whether the collection of value providers contains an element that has the specified key. - true if the collection of value providers contains an element that has the key; otherwise, false. - The key of the element to find in the instance. - - is null. - - - Gets or sets the controller context. - The controller context. - - - Copies the elements of the collection to an array, starting at the specified index. - The one-dimensional array that is the destination of the elements copied from the object. The array must have zero-based indexing. - The zero-based index in at which copying starts. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or-The number of elements in the source collection is greater than the available space from to the end of the destination .-or-Type cannot be cast automatically to the type of the destination array. - - - Gets the number of elements in the collection. - The number of elements in the collection. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets a value that indicates whether the collection is read-only. - true if the collection is read-only; otherwise, false. - - - Gets or sets the object that has the specified key. - The object. - The key. - - - Gets a collection that contains the keys of the instance. - A collection that contains the keys of the object that implements the interface. - - - Removes the first occurrence of the specified item from the collection of value providers. - true if was successfully removed from the collection; otherwise, false. This method also returns false if is not found in the collection. - The object to remove from the instance. - The object is read-only. - - - Removes the element that has the specified key from the collection of value providers. - true if the element was successfully removed; otherwise, false. This method also returns false if was not found in the collection. - The key of the element to remove. - The object is read-only. - - is null. - - - Returns an enumerator that can be used to iterate through a collection. - An enumerator that can be used to iterate through the collection. - - - Determines whether the collection contains the specified prefix. - true if the collection contains the specified prefix; otherwise, false. - The prefix to search for. - - - Returns a value object using the specified key. - The value object for the specified key. - The key of the value object to return. - - - Gets the value of the element that has the specified key. - true if the object that implements contains an element that has the specified key; otherwise, false. - The key of the element to get. - When this method returns, the value that is associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in the object. - A collection of the values in the object that implements the interface. - - - Represents a container for value-provider factory objects. - - - Gets the collection of value-provider factories for the application. - The collection of value-provider factory objects. - - - Represents a factory for creating value-provider objects. - - - Initializes a new instance of the class. - - - Returns a value-provider object for the specified controller context. - A value-provider object. - An object that encapsulates information about the current HTTP request. - - - Represents the collection of value-provider factories for the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the specified list of value-provider factories. - A list of value-provider factories to initialize the collection with. - - - Returns the value-provider factory for the specified controller context. - The value-provider factory object for the specified controller context. - An object that encapsulates information about the current HTTP request. - - - Inserts the specified value-provider factory object at the specified index location. - The zero-based index location at which to insert the value provider into the collection. - The value-provider factory object to insert. - The parameter is null. - - - Sets the specified value-provider factory object at the given index location. - The zero-based index location at which to insert the value provider into the collection. - The value-provider factory object to set. - The parameter is null. - - - Represents the result of binding a value (such as from a form post or query string) to an action-method argument property, or to the argument itself. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified raw value, attempted value, and culture information. - The raw value. - The attempted value. - The culture. - - - Gets or sets the raw value that is converted to a string for display. - The raw value. - - - Converts the value that is encapsulated by this result to the specified type. - The converted value. - The target type. - The parameter is null. - - - Converts the value that is encapsulated by this result to the specified type by using the specified culture information. - The converted value. - The target type. - The culture to use in the conversion. - The parameter is null. - - - Gets or sets the culture. - The culture. - - - Gets or set the raw value that is supplied by the value provider. - The raw value. - - - Encapsulates information that is related to rendering a view. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified controller context, view, view data dictionary, temporary data dictionary, and text writer. - Encapsulates information about the HTTP request. - The view to render. - The dictionary that contains the data that is required in order to render the view. - The dictionary that contains temporary data for the view. - The text writer object that is used to write HTML output. - One of the parameters is null. - - - Gets or sets a value that indicates whether client-side validation is enabled. - true if client-side validation is enabled; otherwise, false. - - - Gets or sets an object that encapsulates information that is required in order to validate and process the input data from an HTML form. - An object that encapsulates information that is required in order to validate and process the input data from an HTML form. - - - Writes the client validation information to the HTTP response. - - - Gets data that is associated with this request and that is available for only one request. - The temporary data. - - - Gets an object that implements the interface to render in the browser. - The view. - - - Gets the view data that is passed to the view. - The view data. - - - Gets or sets the text writer object that is used to write HTML output. - The object that is used to write the HTML output. - - - Represents a container that is used to pass data between a controller and a view. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified model. - The model. - - - Initializes a new instance of the class by using the specified dictionary. - The dictionary. - The parameter is null. - - - Adds the specified item to the collection. - The object to add to the collection. - The collection is read-only. - - - Adds an element to the collection using the specified key and value . - The key of the element to add. - The value of the element to add. - The object is read-only. - - is null. - An element with the same key already exists in the object. - - - Removes all items from the collection. - The object is read-only. - - - Determines whether the collection contains the specified item. - true if is found in the collection; otherwise, false. - The object to locate in the collection. - - - Determines whether the collection contains an element that has the specified key. - true if the collection contains an element that has the specified key; otherwise, false. - The key of the element to locate in the collection. - - is null. - - - Copies the elements of the collection to an array, starting at a particular index. - The one-dimensional array that is the destination of the elements copied from the collection. The array must have zero-based indexing. - The zero-based index in at which copying begins. - - is null. - - is less than 0. - - is multidimensional.-or- is equal to or greater than the length of .-or- The number of elements in the source collection is greater than the available space from to the end of the destination .-or- Type cannot be cast automatically to the type of the destination . - - - Gets the number of elements in the collection. - The number of elements in the collection. - - - Evaluates the specified expression. - The results of the evaluation. - The expression. - The parameter is null or empty. - - - Evaluates the specified expression by using the specified format. - The results of the evaluation. - The expression. - The format. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Returns information about the view data as defined by the parameter. - An object that contains the view data information that is defined by the parameter. - A set of key/value pairs that define the view-data information to return. - The parameter is either null or empty. - - - Gets a value that indicates whether the collection is read-only. - true if the collection is read-only; otherwise, false. - - - Gets or sets the item that is associated with the specified key. - The value of the selected item. - The key. - - - Gets a collection that contains the keys of this dictionary. - A collection that contains the keys of the object that implements . - - - Gets or sets the model that is associated with the view data. - The model that is associated with the view data. - - - Gets or sets information about the model. - Information about the model. - - - Gets the state of the model. - The state of the model. - - - Removes the first occurrence of a specified object from the collection. - true if was successfully removed from the collection; otherwise, false. This method also returns false if is not found in the collection. - The object to remove from the collection. - The collection is read-only. - - - Removes the element from the collection using the specified key. - true if the element is successfully removed; otherwise, false. This method also returns false if was not found in the original collection. - The key of the element to remove. - The collection is read-only. - - is null. - - - Sets the data model to use for the view. - The data model to use for the view. - - - Returns an enumerator that can be used to iterate through the collection. - An enumerator that can be used to iterate through the collection. - - - Gets or sets an object that encapsulates information about the current template context. - An object that contains information about the current template. - - - Attempts to retrieve the value that is associated with the specified key. - true if the collection contains an element with the specified key; otherwise, false. - The key of the value to get. - When this method returns, the value that is associated with the specified key, if the key is found; otherwise, the default value for the type of the parameter. This parameter is passed uninitialized. - - is null. - - - Gets a collection that contains the values in this dictionary. - A collection that contains the values of the object that implements . - - - Represents a container that is used to pass strongly typed data between a controller and a view. - The type of the model. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified view data dictionary. - An existing view data dictionary to copy into this instance. - - - Initializes a new instance of the class by using the specified model. - The data model to use for the view. - - - Gets or sets the model. - A reference to the data model. - - - Gets or sets information about the model. - Information about the model. - - - Sets the data model to use for the view. - The data model to use for the view. - An error occurred while the model was being set. - - - Encapsulates information about the current template content that is used to develop templates and about HTML helpers that interact with templates. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class and associates a delegate for accessing the view data information. - A delegate that defines how the view data information is accessed. - - - Gets or sets the object that contains the values to be displayed by the template. - The object that contains the values to be displayed by the template. - - - Gets or sets the description of the property to be displayed by the template. - The description of the property to be displayed by the template. - - - Gets or sets the current value to be displayed by the template. - The current value to be displayed by the template. - - - Represents a collection of view engines that are available to the application. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class by using the specified list of view engines. - The list that is wrapped by the new collection. - - is null. - - - Finds the specified partial view by using the specified controller context. - The partial view. - The controller context. - The name of the partial view. - The parameter is null. - The parameter is null or empty. - - - Finds the specified view by using the specified controller context and master view. - The view. - The controller context. - The name of the view. - The name of the master view. - The parameter is null. - The parameter is null or empty. - - - Inserts an element into the collection at the specified index. - The zero-based index at which should be inserted. - The object to insert. - - is less than zero.-or- is greater than the number of items in the collection. - The parameter is null. - - - Replaces the element at the specified index. - The zero-based index of the element to replace. - The new value for the element at the specified index. - - is less than zero.-or- is greater than the number of items in the collection. - The parameter is null. - - - Represents the result of locating a view engine. - - - Initializes a new instance of the class by using the specified searched locations. - The searched locations. - The parameter is null. - - - Initializes a new instance of the class by using the specified view and view engine. - The view. - The view engine. - The or parameter is null. - - - Gets or sets the searched locations. - The searched locations. - - - Gets or sets the view. - The view. - - - Gets or sets the view engine. - The view engine. - - - Represents a collection of view engines that are available to the application. - - - Gets the view engines. - The view engines. - - - Represents the information that is needed to build a master view page. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the master page. - The AJAX script for the master page. - - - Gets the HTML for the master page. - The HTML for the master page. - - - Gets the model. - The model. - - - Gets the temporary data. - The temporary data. - - - Gets the URL. - The URL. - - - Gets the view context. - The view context. - - - Gets the view data. - The view data. - - - Gets the writer that is used to render the master page. - The writer that is used to render the master page. - - - Represents the information that is required in order to build a strongly typed master view page. - The type of the model. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the master page. - The AJAX script for the master page. - - - Gets the HTML for the master page. - The HTML for the master page. - - - Gets the model. - A reference to the data model. - - - Gets the view data. - The view data. - - - Represents the properties and methods that are needed to render a view as a Web Forms page. - - - Initializes a new instance of the class. - - - Gets or sets the object that is used to render HTML in Ajax scenarios. - The Ajax helper object that is associated with the view. - - - Gets or sets the object that is used to render HTML elements. - The HTML helper object that is associated with the view. - - - Initializes the , , and properties. - - - Gets or sets the path of the master view. - The path of the master view. - - - Gets the Model property of the associated object. - The Model property of the associated object. - - - Raises the event at the beginning of page initialization. - The event data. - - - Enables processing of the specified HTTP request by the ASP.NET MVC framework. - An object that encapsulates HTTP-specific information about the current HTTP request. - - - Initializes the object that receives the page content to be rendered. - The object that receives the page content. - - - Renders the view page to the response using the specified view context. - An object that encapsulates the information that is required in order to render the view, which includes the controller context, form context, the temporary data, and the view data for the associated view. - - - Sets the text writer that is used to render the view to the response. - The writer that is used to render the view to the response. - - - Sets the view data dictionary for the associated view. - A dictionary of data to pass to the view. - - - Gets the temporary data to pass to the view. - The temporary data to pass to the view. - - - Gets or sets the URL of the rendered page. - The URL of the rendered page. - - - Gets or sets the information that is used to render the view. - The information that is used to render the view, which includes the form context, the temporary data, and the view data of the associated view. - - - Gets or sets a dictionary that contains data to pass between the controller and the view. - A dictionary that contains data to pass between the controller and the view. - - - Gets the text writer that is used to render the view to the response. - The text writer that is used to render the view to the response. - - - Represents the information that is required in order to render a strongly typed view as a Web Forms page. - The type of the model. - - - Initializes a new instance of the class. - - - Gets or sets the object that supports rendering HTML in Ajax scenarios. - The Ajax helper object that is associated with the view. - - - Gets or sets the object that provides support for rendering elements. - The HTML helper object that is associated with the view. - - - Instantiates and initializes the and properties. - - - Gets the property of the associated object. - A reference to the data model. - - - Sets the view data dictionary for the associated view. - A dictionary of data to pass to the view. - - - Gets or sets a dictionary that contains data to pass between the controller and the view. - A dictionary that contains data to pass between the controller and the view. - - - Represents a class that is used to render a view by using an instance that is returned by an object. - - - Initializes a new instance of the class. - - - Searches the registered view engines and returns the object that is used to render the view. - The object that is used to render the view. - The controller context. - An error occurred while the method was searching for the view. - - - Gets the name of the master view (such as a master page or template) to use when the view is rendered. - The name of the master view. - - - Represents a base class that is used to provide the model to the view and then render the view to the response. - - - Initializes a new instance of the class. - - - When called by the action invoker, renders the view to the response. - The context that the result is executed in. - The parameter is null. - - - Returns the object that is used to render the view. - The view engine. - The context. - - - Gets or sets the object for this result. - The temporary data. - - - Gets or sets the object that is rendered to the response. - The view. - - - Gets or sets the view data object for this result. - The view data. - - - Gets or sets the collection of view engines that are associated with this result. - The collection of view engines. - - - Gets or sets the name of the view to render. - The name of the view. - - - Provides a container for objects. - - - Initializes a new instance of the class. - - - Provides a container for objects. - The type of the model. - - - Initializes a new instance of the class. - - - Gets the formatted value. - The formatted value. - - - Represents the type of a view. - - - Initializes a new instance of the class. - - - Gets or sets the name of the type. - The name of the type. - - - Represents the information that is needed to build a user control. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the view. - The AJAX script for the view. - - - Ensures that view data is added to the object of the user control if the view data exists. - - - Gets the HTML for the view. - The HTML for the view. - - - Gets the model. - The model. - - - Renders the view by using the specified view context. - The view context. - - - Sets the text writer that is used to render the view to the response. - The writer that is used to render the view to the response. - - - Sets the view-data dictionary by using the specified view data. - The view data. - - - Gets the temporary-data dictionary. - The temporary-data dictionary. - - - Gets the URL for the view. - The URL for the view. - - - Gets or sets the view context. - The view context. - - - Gets or sets the view-data dictionary. - The view-data dictionary. - - - Gets or sets the view-data key. - The view-data key. - - - Gets the writer that is used to render the view to the response. - The writer that is used to render the view to the response. - - - Represents the information that is required in order to build a strongly typed user control. - The type of the model. - - - Initializes a new instance of the class. - - - Gets the AJAX script for the view. - The AJAX script for the view. - - - Gets the HTML for the view. - The HTML for the view. - - - Gets the model. - A reference to the data model. - - - Sets the view data for the view. - The view data. - - - Gets or sets the view data. - The view data. - - - Represents an abstract base-class implementation of the interface. - - - Initializes a new instance of the class. - - - Gets or sets the area-enabled master location formats. - The area-enabled master location formats. - - - Gets or sets the area-enabled partial-view location formats. - The area-enabled partial-view location formats. - - - Gets or sets the area-enabled view location formats. - The area-enabled view location formats. - - - Creates the specified partial view by using the specified controller context. - A reference to the partial view. - The controller context. - The partial path for the new partial view. - - - Creates the specified view by using the controller context, path of the view, and path of the master view. - A reference to the view. - The controller context. - The path of the view. - The path of the master view. - - - Returns a value that indicates whether the file is in the specified path by using the specified controller context. - true if the file is in the specified path; otherwise, false. - The controller context. - The virtual path. - - - Finds the specified partial view by using the specified controller context. - The partial view. - The controller context. - The name of the partial view. - true to use the cached partial view. - The parameter is null (Nothing in Visual Basic). - The parameter is null or empty. - - - Finds the specified view by using the specified controller context and master view name. - The page view. - The controller context. - The name of the view. - The name of the master view. - true to use the cached view. - The parameter is null (Nothing in Visual Basic). - The parameter is null or empty. - - - Gets or sets the master location formats. - The master location formats. - - - Gets or sets the partial-view location formats. - The partial-view location formats. - - - Releases the specified view by using the specified controller context. - The controller context. - The view to release. - - - Gets or sets the view location cache. - The view location cache. - - - Gets or sets the view location formats. - The view location formats. - - - Gets or sets the virtual path provider. - The virtual path provider. - - - Represents the information that is needed to build a Web Forms page in MVC. - - - Initializes a new instance of the class by using the specified path to the view. - The view path. - The parameter is null (Nothing in Visual Basic). - - - Initializes a new instance of the class by using the specified paths to the view and master view. - The view path. - The master path. - The parameter is null (Nothing in Visual Basic). - - - Gets or sets the master path. - The master path. - - - Renders the specified view context by using the specified writer for rendering the view to the response. - The view context. - The writer that is used to render the view to the response. - The parameter is null (Nothing in Visual Basic). - An error occurred while attempting to render the view. - - - Gets or sets the view path. - The view path. - - - Represents a view engine that is used to render a Web Forms page to the response. - - - Initializes a new instance of the class. - - - Creates the specified partial view by using the specified controller context. - The partial view. - The controller context. - The partial path. - - - Creates the specified view by using the specified controller context and the paths of the view and master view. - The view. - The controller context. - The view path. - The master-view path. - - - Determines whether a file at the specified location exists for the specified controller context. - true if the file exists; otherwise, false. - The controller context. - The virtual path. - - - Represents support for ASP.NET AJAX within an ASP.NET MVC application. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the URL to the specified action method; when the action link is clicked, the action method is invoked asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the action method. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - The name of the controller. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - The name of the action method that will handle the request. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element.. - - - Writes an opening <form> tag to the response. - An opening <form> tag. - The AJAX helper. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - - - Writes an opening <form> tag to the response using the specified routing information. - An opening <form> tag. - The AJAX helper. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - - - Returns an HTML script element that contains a reference to a globalization script that defines the culture information. - A script element whose src attribute is set to the globalization script, as in the following example: <script type="text/javascript" src="/MvcApplication1/Scripts/Globalization/en-US.js"></script> - The AJAX helper object that this method extends. - - - Returns an HTML script element that contains a reference to a globalization script that defines the specified culture information. - An HTML script element whose src attribute is set to the globalization script, as in the following example:<script type="text/javascript" src="/MvcApplication1/Scripts/Globalization/en-US.js"></script> - The AJAX helper object that this method extends. - Encapsulates information about the target culture, such as date formats. - The parameter is null. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - The name of the route to use to obtain the form post URL. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - The parameter is null or empty. - - - Returns an anchor element that contains the virtual path for the specified route values; when the link is clicked, a request is made to the virtual path asynchronously by using JavaScript. - An anchor element. - The AJAX helper. - The inner text of the anchor element. - An object that contains the parameters for a route. - An object that provides options for the asynchronous request. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Represents option settings for running AJAX scripts in an MVC application. - - - Initializes a new instance of the class. - - - Gets or sets the message to display in a confirmation window before a request is submitted. - The message to display in a confirmation window. - - - Gets or sets the HTTP request method ("Get" or "Post"). - The HTTP request method. - - - Gets or sets the mode that specifies how to insert the response into the target DOM element. - The insertion mode ("InsertAfter", "InsertBefore", or "Replace"). - - - Gets or sets the id attribute of an HTML element that is displayed while the Ajax function is loading. - The ID of the element that is displayed while the Ajax function is loading. - - - Gets or sets the name of the JavaScript function to call immediately before the page is updated. - The name of the JavaScript function to call before the page is updated. - - - Gets or sets the JavaScript function to call when response data has been instantiated but before the page is updated. - The JavaScript function to call when the response data has been instantiated. - - - Gets or sets the JavaScript function to call if the page update fails. - The JavaScript function to call if the page update fails. - - - Gets or sets the JavaScript function to call after the page is successfully updated. - The JavaScript function to call after the page is successfully updated. - - - Gets or sets the ID of the DOM element to update by using the response from the server. - The ID of the DOM element to update. - - - Gets or sets the URL to make the request to. - The URL to make the request to. - - - Enumerates the AJAX script insertion modes. - - - Replace the element. - - - Insert before the element. - - - Insert after the element. - - - Provides information about an asynchronous action method, such as its name, controller, parameters, attributes, and filters. - - - Initializes a new instance of the class. - - - Invokes the asynchronous action method by using the specified parameters and controller context. - An object that contains the result of an asynchronous call. - The controller context. - The parameters of the action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Returns the result of an asynchronous operation. - The result of an asynchronous operation. - An object that represents the status of an asynchronous operation. - - - Executes the asynchronous action method by using the specified parameters and controller context. - The result of executing the asynchronous action method. - The controller context. - The parameters of the action method. - - - Represents a class that is responsible for invoking the action methods of an asynchronous controller. - - - Initializes a new instance of the class. - - - Invokes the asynchronous action method by using the specified controller context, action name, callback method, and state. - An object that contains the result of an asynchronous operation. - The controller context. - The name of the action. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Invokes the asynchronous action method by using the specified controller context, action descriptor, parameters, callback method, and state. - An object that contains the result of an asynchronous operation. - The controller context. - The action descriptor. - The parameters for the asynchronous action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Invokes the asynchronous action method by using the specified controller context, filters, action descriptor, parameters, callback method, and state. - An object that contains the result of an asynchronous operation. - The controller context. - The filters. - The action descriptor. - The parameters for the asynchronous action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Cancels the action. - true if the action was canceled; otherwise, false. - The user-defined object that qualifies or contains information about an asynchronous operation. - - - Cancels the action. - true if the action was canceled; otherwise, false. - The user-defined object that qualifies or contains information about an asynchronous operation. - - - Cancels the action. - true if the action was canceled; otherwise, false. - The user-defined object that qualifies or contains information about an asynchronous operation. - - - Returns the controller descriptor. - The controller descriptor. - The controller context. - - - Provides asynchronous operations for the class. - - - Initializes a new instance of the class. - - - Initializes a new instance of the class using the synchronization context. - The synchronization context. - - - Notifies ASP.NET that all asynchronous operations are complete. - - - Occurs when the method is called. - - - Gets the number of outstanding operations. - The number of outstanding operations. - - - Gets the parameters that were passed to the asynchronous completion method. - The parameters that were passed to the asynchronous completion method. - - - Executes a callback in the current synchronization context. - The asynchronous action. - - - Gets or sets the asynchronous timeout value, in milliseconds. - The asynchronous timeout value, in milliseconds. - - - Defines the interface for an action invoker, which is used to invoke an asynchronous action in response to an HTTP request. - - - Invokes the specified action. - The status of the asynchronous result. - The controller context. - The name of the asynchronous action. - The callback method. - The state. - - - Cancels the asynchronous action. - true if the asynchronous method could be canceled; otherwise, false. - The asynchronous result. - - - Defines the methods that are required for an asynchronous controller. - - - Executes the specified request context. - The status of the asynchronous operation. - The request context. - The asynchronous callback method. - The state. - - - Ends the asynchronous operation. - The asynchronous result. - - - Provides a container for the asynchronous manager object. - - - Gets the asynchronous manager object. - The asynchronous manager object. - - - Provides a container that maintains a count of pending asynchronous operations. - - - Initializes a new instance of the class. - - - Occurs when an asynchronous method completes. - - - Gets the operation count. - The operation count. - - - Reduces the operation count by 1. - The updated operation count. - - - Reduces the operation count by the specified value. - The updated operation count. - The number of operations to reduce the count by. - - - Increments the operation count by one. - The updated operation count. - - - Increments the operation count by the specified value. - The updated operation count. - The number of operations to increment the count by. - - - Provides information about an asynchronous action method, such as its name, controller, parameters, attributes, and filters. - - - Initializes a new instance of the class. - An object that contains information about the method that begins the asynchronous operation (the method whose name ends with "Asynch"). - An object that contains information about the completion method (method whose name ends with "Completed"). - The name of the action. - The controller descriptor. - - - Gets the name of the action method. - The name of the action method. - - - Gets the method information for the asynchronous action method. - The method information for the asynchronous action method. - - - Begins running the asynchronous action method by using the specified parameters and controller context. - An object that contains the result of an asynchronous call. - The controller context. - The parameters of the action method. - The callback method. - An object that contains information to be used by the callback method. This parameter can be null. - - - Gets the method information for the asynchronous completion method. - The method information for the asynchronous completion method. - - - Gets the controller descriptor for the asynchronous action method. - The controller descriptor for the asynchronous action method. - - - Returns the result of an asynchronous operation. - The result of an asynchronous operation. - An object that represents the status of an asynchronous operation. - - - Returns an array of custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns an array of custom attributes that are defined for this member, identified by type. - An array of custom attributes, or an empty array if no custom attributes of the specified type exist. - The type of the custom attributes to return. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns the filters that are associated with the action method. - The filters that are associated with the action method. - - - Returns the parameters of the action method. - The parameters of the action method. - - - Returns the action method selectors. - The action method selectors. - - - Determines whether one or more instances of the specified attribute type are defined for the action member. - true if an attribute of type that is represented by is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Encapsulates information that describes an asynchronous controller, such as its name, type, and actions. - - - Initializes a new instance of the class. - The type of the controller. - - - Gets the type of the controller. - The type of the controller. - - - Finds an action method by using the specified name and controller context. - The information about the action method. - The controller context. - The name of the action. - - - Returns a list of action method descriptors in the controller. - A list of action method descriptors in the controller. - - - Returns custom attributes that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns custom attributes of a specified type that are defined for this member, excluding named attributes. - An array of custom attributes, or an empty array if no custom attributes exist. - The type of the custom attributes. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Returns a value that indicates whether one or more instances of the specified custom attribute are defined for this member. - true if an attribute of the type represented by is defined for this member; otherwise, false. - The type of the custom attribute. - true to look up the hierarchy chain for the inherited custom attribute; otherwise, false. - - - Represents an exception that occurred during the synchronous processing of an HTTP request in an ASP.NET MVC application. - - - Initializes a new instance of the class using a system-supplied message. - - - Initializes a new instance of the class using the specified message. - The message that describes the exception. The caller of this constructor must make sure that this string has been localized for the current system culture. - - - Initializes a new instance of the class using a specified error message and a reference to the inner exception that is the cause of this exception. - The message that describes the exception. The caller of this constructor must make sure that this string has been localized for the current system culture. - The exception that is the cause of the current exception. If the parameter is not null, the current exception is raised in a catch block that handles the inner exception. - - - Represents support for calling child action methods and rendering the result inline in a parent view. - - - Invokes the specified child action method and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method with the specified parameters and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified controller name and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The name of the controller that contains the action method. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The name of the controller that contains the action method. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - The name of the controller that contains the action method. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and returns the result as an HTML string. - The child action result as an HTML string. - The HTML helper instance that this method extends. - The name of the action method to invoke. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified controller name and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The name of the controller that contains the action method. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The name of the controller that contains the action method. - An object that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and controller name and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - The name of the controller that contains the action method. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Invokes the specified child action method using the specified parameters and renders the result inline in the parent view. - The HTML helper instance that this method extends. - The name of the child action method to invoke. - A dictionary that contains the parameters for a route. You can use to provide the parameters that are bound to the action method parameters. The parameter is merged with the original route values and overrides them. - The parameter is null. - The parameter is null or empty. - The required virtual path data cannot be found. - - - Represents support for rendering object values as HTML. - - - Returns HTML markup for each property in the object that is represented by a string expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - - - Returns HTML markup for each property in the object that is represented by a string expression, using additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template and an HTML field ID. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns HTML markup for each property in the object that is represented by the expression, using the specified template, HTML field ID, and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - - Returns HTML markup for each property in the object that is represented by the expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The type of the model. - The type of the value. - - - Returns a string that contains each property value in the object that is represented by the specified expression, using additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns a string that contains each property value in the object that is represented by the , using the specified template. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - The type of the model. - The type of the value. - - - Returns a string that contains each property value in the object that is represented by the specified expression, using the specified template and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns HTML markup for each property in the object that is represented by the , using the specified template and an HTML field ID. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - The type of the model. - The type of the value. - - - Returns HTML markup for each property in the object that is represented by the specified expression, using the template, an HTML field ID, and additional view data. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns HTML markup for each property in the model. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - - - Returns HTML markup for each property in the model, using the additional view data. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the model using the specified template. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - - - Returns HTML markup for each property in the model, using the specified template and additional view data. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns HTML markup for each property in the model using the specified template and HTML field ID. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns HTML markup for each property in the model, using the specified template, an HTML field ID, and additional view data. - The HTML markup for each property in the model. - The HTML helper instance that this method extends. - The name of the template that is used to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Provides a way to render object values as HTML. - - - Returns HTML markup for each property in the object that is represented by the specified expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - - - Returns HTML markup for each property in the object that is represented by the specified expression. - The HTML markup for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The type of the model. - The type of the value. - - - Represents support for the HTML input element in an application. - - - Returns an HTML input element for each property in the object that is represented by the expression. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and HTML field name. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template, HTML field name, and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the object that is represented by the expression. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template and HTML field name. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the object that is represented by the expression, using the specified template, HTML field name, and additional view data. - An HTML input element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to display. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - The type of the model. - The type of the value. - - - Returns an HTML input element for each property in the model. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - - - Returns an HTML input element for each property in the model, using additional view data. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the model, using the specified template. - An HTML input element for each property in the model and in the specified template. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - - - Returns an HTML input element for each property in the model, using the specified template and additional view data. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Returns an HTML input element for each property in the model, using the specified template name and HTML field name. - An HTML input element for each property in the model and in the named template. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - - - Returns an HTML input element for each property in the model, using the template name, HTML field name and additional view data. - An HTML input element for each property in the model. - The HTML helper instance that this method extends. - The name of the template to use to render the object. - A string that is used to disambiguate the names of HTML input elements that are rendered for properties that have the same name. - An anonymous object that can contain additional view data that will be merged into the instance that is created for the template. - - - Represents support for HTML in an application. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the action method. - The name of the controller. - An object that contains the parameters for a route. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by an action method. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. This object is typically created by using object initializer syntax. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route - The HTTP method for processing the form, either GET or POST. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - The name of the route to use to obtain the form-post URL. - An object that contains the parameters for a route - The HTTP method for processing the form, either GET or POST. - An object that contains the HTML attributes to set for the element. - - - Writes an opening <form> tag to the response. When the user submits the form, the request will be processed by the route target. - An opening <form> tag. - The HTML helper instance that this method extends. - An object that contains the parameters for a route - - - Renders the closing </form> tag to the response. - The HTML helper instance that this method extends. - - - Represents support for HTML input controls in an application. - - - Returns a check box input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, and a value to indicate whether the check box is selected. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - true to select the check box; otherwise, false. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, a value to indicate whether the check box is selected, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - true to select the check box; otherwise, false. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, a value that indicates whether the check box is selected, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - true to select the check box; otherwise, false. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element by using the specified HTML helper, the name of the form field, and the HTML attributes. - An input element whose type attribute is set to "checkbox". - The HTML helper instance that this method extends. - The name of the form field. - An object that contains the HTML attributes to set for the element. - - - Returns a check box input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "checkbox" for each property in the object that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The parameter is null. - - - Returns a check box input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "checkbox" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The parameter is null. - - - Returns a check box input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "checkbox" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The parameter is null. - - - Returns a hidden input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - - - Returns a hidden input element by using the specified HTML helper, the name of the form field, and the value. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the hidden input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - - - Returns a hidden input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the hidden input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a hidden input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "hidden". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the hidden input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns an HTML hidden input element for each property in the object that is represented by the specified expression. - An input element whose type attribute is set to "hidden" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns an HTML hidden input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An input element whose type attribute is set to "hidden" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns an HTML hidden input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An input element whose type attribute is set to "hidden" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns a password input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - - - Returns a password input element by using the specified HTML helper, the name of the form field, and the value. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the password input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - - - Returns a password input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the password input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a password input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "password". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the password input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a password input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "password" for each property in the object that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a password input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "password" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a password input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "password" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - true to select the radio button; otherwise, false. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - true to select the radio button; otherwise, false. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - true to select the radio button; otherwise, false. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element that is used to present mutually exclusive options. - An input element whose type attribute is set to "radio". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - The parameter is null. - - - Returns a radio button input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "radio" for each property in the object that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a radio button input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "radio" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a radio button input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "radio" for each property in the object that is represented by the specified expression, using the specified HTML attributes. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - If this radio button is selected, the value of the radio button that is submitted when the form is posted. If the value of the selected radio button in the or the object matches this value, this radio button is selected. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns a text input element by using the specified HTML helper and the name of the form field. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - - - Returns a text input element by using the specified HTML helper, the name of the form field, and the value. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the text input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - - - Returns a text input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the text input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a text input element by using the specified HTML helper, the name of the form field, the value, and the HTML attributes. - An input element whose type attribute is set to "text". - The HTML helper instance that this method extends. - The name of the form field and the key that is used to look up the value. - The value of the text input element. If this value is null, the value of the element is retrieved from the object. If no value exists there, the value is retrieved from the object. - An object that contains the HTML attributes to set for the element. - - - Returns a text input element for each property in the object that is represented by the specified expression. - An HTML input element whose type attribute is set to "text" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns a text input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element type attribute is set to "text" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Returns a text input element for each property in the object that is represented by the specified expression, using the specified HTML attributes. - An HTML input element whose type attribute is set to "text" for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null or empty. - - - Represents support for the HTML label element in an ASP.NET MVC view. - - - Returns an HTML label element and the property name of the property that is represented by the specified expression. - An HTML label element and the property name of the property that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the property to display. - - - Returns an HTML label element and the property name of the property that is represented by the specified expression. - An HTML label element and the property name of the property that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the property to display. - The type of the model. - The type of the value. - - - Returns an HTML label element and the property name of the property that is represented by the model. - An HTML label element and the property name of the property that is represented by the model. - The HTML helper instance that this method extends. - - - Represents support for HTML links in an application. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes for the element. The attributes are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - The name of the controller. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the action. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. The parameters are retrieved through reflection by examining the properties of the object. The object is typically created by using object initializer syntax. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - The protocol for the URL, such as "http" or "https". - The host name for the URL. - The URL fragment name (the anchor name). - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - The name of the route that is used to return a virtual path. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. - The parameter is null or empty. - - - Returns an anchor element (a element) that contains the virtual path of the specified action. - An anchor element (a element). - The HTML helper instance that this method extends. - The inner text of the anchor element. - An object that contains the parameters for a route. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Represents an HTML form element in an MVC view. - - - Initializes a new instance of the class using the specified HTTP response object. - The HTTP response object. - The parameter is null. - - - Initializes a new instance of the class using the specified view context. - An object that encapsulates the information that is required in order to render a view. - The parameter is null. - - - Releases all resources that are used by the current instance of the class. - - - Releases unmanaged and, optionally, managed resources used by the current instance of the class. - true to release both managed and unmanaged resources; false to release only unmanaged resources. - - - Ends the form and disposes of all form resources. - - - Represents the functionality to render a partial view as an HTML-encoded string. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view to render. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view to render. - The model for the partial view. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view. - The model for the partial view. - The view data dictionary for the partial view. - - - Renders the specified partial view as an HTML-encoded string. - The partial view that is rendered as an HTML-encoded string. - The HTML helper instance that this method extends. - The name of the partial view to render. - The view data dictionary for the partial view. - - - Provides support for rendering a partial view. - - - Renders the specified partial view by using the specified HMTL helper. - The HTML helper. - The name of the partial view - - - Renders the specified partial view, passing it a copy of the current object, but with the Model property set to the specified model. - The HTML helper. - The name of the partial view. - The model. - - - Renders the specified partial view, replacing the partial view's ViewData property with the specified object and setting the Model property of the view data to the specified model. - The HTML helper. - The name of the partial view. - The model for the partial view. - The view data for the partial view. - - - Renders the specified partial view, replacing its ViewData property with the specified object. - The HTML helper. - The name of the partial view. - The view data. - - - Represents support for making selections in a list. - - - Returns a single-selection select element using the specified HTML helper and the name of the form field. - An HTML select element. - The HTML helper instance that this method extends. - The name of the form field to return. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, and the specified list items. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, and an option label. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, an option label, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, the specified list items, an option label, and the specified HTML attributes. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a single-selection select element using the specified HTML helper, the name of the form field, and an option label. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - The text for a default empty item. This parameter can be null. - The parameter is null or empty. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the drop-down list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the drop-down list. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and option label. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items, option label, and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items, option label, and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the drop-down list. - The text for a default empty item. This parameter can be null. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - - - Returns a multi-select select element using the specified HTML helper and the name of the form field. - An HTML select element. - The HTML helper instance that this method extends. - The name of the form field to return. - The parameter is null or empty. - - - Returns a multi-select select element using the specified HTML helper, the name of the form field, and the specified list items. - An HTML select element with an option subelement for each item in the list. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - The parameter is null or empty. - - - Returns a multi-select select element using the specified HTML helper, the name of the form field, the specified list items, and the specified HMTL attributes. - An HTML select element with an option subelement for each item in the list.. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns a multi-select select element using the specified HTML helper, the name of the form field, and the specified list items. - An HTML select element with an option subelement for each item in the list.. - The HTML helper instance that this method extends. - The name of the form field to return. - A collection of objects that are used to populate the drop-down list. - An object that contains the HTML attributes to set for the element. - The parameter is null or empty. - - - Returns an HTML select element for each property in the object that is represented by the specified expression and using the specified list items. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the list. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the list. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML select element for each property in the object that is represented by the specified expression using the specified list items and HTML attributes. - An HTML select element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A collection of objects that are used to populate the list. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Represents support for HTML textarea controls. - - - Returns the specified textarea element by using the specified HTML helper and the name of the form field. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper and HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, and the text content. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, the number of rows and columns, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - The number of rows. - The number of columns. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, the number of rows and columns, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - The number of rows. - The number of columns. - An object that contains the HTML attributes to set for the element. - - - Returns the specified textarea element by using the specified HTML helper, the name of the form field, the text content, and the specified HTML attributes. - The textarea element. - The HTML helper instance that this method extends. - The name of the form field to return. - The text content. - An object that contains the HTML attributes to set for the element. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes and the number of rows and columns. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The number of rows. - The number of columns. - A dictionary that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes and the number of rows and columns. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The number of rows. - The number of columns. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Returns an HTML textarea element for each property in the object that is represented by the specified expression using the specified HTML attributes. - An HTML textarea element for each property in the object that is represented by the expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - An object that contains the HTML attributes to set for the element. - The type of the model. - The type of the value. - The parameter is null. - - - Provides support for validating the input from an HTML form. - - - Gets or sets the name of the resource file (class key) that contains localized string values. - The name of the resource file (class key). - - - Retrieves the validation metadata for the specified model and applies each rule to the data field. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The parameter is null. - - - Retrieves the validation metadata and validates each data field that is represented by the specified expression. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - An object that contains the HTML attributes for the element. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - An object that contains the HTML attributes for the element. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The message to display if the specified field contains an error. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - - - Displays a validation message if an error exists for the specified field in the object. - If the property or object is valid, an empty string; otherwise, a span element that contains an error message. - The HTML helper instance that this method extends. - The name of the property or model object that is being validated. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression. - The HTML markup for a validation-error message for each data field that is represented by the expression. If no validation error occurs or client validation is disabled, this method returns null. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The type of the model. - The type of the value. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression, using the specified message. - The HTML markup for a validation-error message for each data field that is represented by the expression. If no validation error occurs or client validation is disabled, this method returns null. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The message to display if the specified field contains an error. - The type of the model. - The type of the value. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression, using the specified message and HTML attributes. - The HTML markup for a validation-error message for each data field that is represented by the expression. If no validation error occurs or client validation is disabled, this method returns null. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The message to display if the specified field contains an error. - A dictionary that contains the HTML attributes for the element. - The type of the model. - The type of the value. - - - Returns the HTML markup for a validation-error message for each data field that is represented by the specified expression, using the specified message and HTML attributes. - The HTML markup for a validation-error message for each data field that is represented by the expression. If no validation error occurs or client validation is disabled, this method returns null. - The HTML helper instance that this method extends. - An expression that identifies the object that contains the properties to render. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - The type of the model. - The type of the value. - - - Returns an unordered list (ul element) of validation messages that are in the object. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - The message to display with the validation summary. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - The message to display with the validation summary. - A dictionary that contains the HTML attributes for the element. - - - Returns an unordered list (ul element) of validation messages that are in the object and optionally displays only model-level errors. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - true to have the summary display model-level errors only, or false to have the summary display all errors. - The message to display with the validation summary. - An object that contains the HTML attributes for the element. - - - Returns an unordered list (ul element) of validation messages that are in the object. - A string that contains an unordered list (ul element) of validation messages. - The HMTL helper instance that this method extends. - The message to display if the specified field contains an error. - - - Returns an unordered list (ul element) of validation messages that are in the object. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - The message to display if the specified field contains an error. - A dictionary that contains the HTML attributes for the element. - - - Returns an unordered list (ul element) of validation messages in the object. - A string that contains an unordered list (ul element) of validation messages. - The HTML helper instance that this method extends. - The message to display if the specified field contains an error. - An object that contains the HTML attributes for the element. - - - \ No newline at end of file diff --git a/lib/Mvc3/System.Web.Mvc.dll b/lib/Mvc3/System.Web.Mvc.dll deleted file mode 100644 index eed0d994a05894a694b816d503f87e6f5ba6b4de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 445280 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 CEF@O| diff --git a/lib/Ninject.Web.Common/RequiredDependency.txt b/lib/Ninject.Web.Common/RequiredDependency.txt deleted file mode 100644 index be02845..0000000 --- a/lib/Ninject.Web.Common/RequiredDependency.txt +++ /dev/null @@ -1 +0,0 @@ -Add the various Ninject.Web.Common platform builds here. The simplest way is to add the Zip files generated by the Ninject release build and call the UnzipDependencies.cmd in the main folder. \ No newline at end of file diff --git a/lib/Ninject/RequiredDependency.txt b/lib/Ninject/RequiredDependency.txt deleted file mode 100644 index c029fce..0000000 --- a/lib/Ninject/RequiredDependency.txt +++ /dev/null @@ -1 +0,0 @@ -Add the various Ninject platform builds here. The simplest way is to add the Zip files generated by the Ninject release build and call the UnzipDependencies.cmd in the main folder. \ No newline at end of file diff --git a/lib/log4net/LICENSE.txt b/lib/log4net/LICENSE.txt deleted file mode 100644 index 261eeb9..0000000 --- a/lib/log4net/LICENSE.txt +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/lib/log4net/NOTICE.txt b/lib/log4net/NOTICE.txt deleted file mode 100644 index f16ef42..0000000 --- a/lib/log4net/NOTICE.txt +++ /dev/null @@ -1,15 +0,0 @@ - ** - ** NOTICE file corresponding to the section 4 (d) of the Apache License, - ** Version 2.0, in this case for the Apache log4net distribution. - ** - - This product includes software developed by - The Apache Software Foundation (http://www.apache.org/). - - Please read the LICENSE files present in the root directory of this - distribution. - - The names "log4net" and "Apache Software Foundation" must not be used to - endorse or promote products derived from this software without prior - written permission. For written permission, please contact - apache@apache.org. diff --git a/lib/log4net/README.txt b/lib/log4net/README.txt deleted file mode 100644 index 508ae05..0000000 --- a/lib/log4net/README.txt +++ /dev/null @@ -1,20 +0,0 @@ -Project Status -============== - -log4net is an effort undergoing incubation at the Apache Software Foundation -(ASF), sponsored by the Apache Logging Services project. Incubation is required -of all newly accepted projects until a further review indicates that the -infrastructure, communications, and decision making process have stabilized in -a manner consistent with other successful ASF projects. While incubation status -is not necessarily a reflection of the completeness or stability of the code, -it does indicate that the project has yet to be fully endorsed by the ASF. - - -Documentation -============= - -For local documentation, which is correct for this release see: -doc/index.html - -For the latest documentation see the log4net web site at: -http://logging.apache.org/log4net diff --git a/lib/log4net/mono-2.0/log4net.dll b/lib/log4net/mono-2.0/log4net.dll deleted file mode 100644 index 987993613315e0456431107dd7cd62d16a0a7922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 237568 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
kpP#7 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 diff --git a/lib/log4net/mono-2.0/log4net.xml b/lib/log4net/mono-2.0/log4net.xml deleted file mode 100644 index b12cb5e..0000000 --- a/lib/log4net/mono-2.0/log4net.xml +++ /dev/null @@ -1,25592 +0,0 @@ - - - - C:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\bin\mono\2.0\release\log4net - - - - - Implement this interface for your own strategies for printing log statements. - - - - Implementors should consider extending the - class which provides a default implementation of this interface. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - Gets or sets the name of this appender. - - The name of the appender. - - The name uniquely identifies the appender. - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - Log the logging event in Appender specific way. - - The event to log - - - This method is called to log a message into this appender. - - - - - Interface for appenders that support bulk logging. - - - - This interface extends the interface to - support bulk logging of objects. Appenders - should only implement this interface if they can bulk log efficiently. - - - Nicko Cadell - - - Log the array of logging events in Appender specific way. - - The events to log - - - This method is called to log an array of events into this appender. - - - - - Interface for attaching appenders to objects. - - - - Interface for attaching, removing and retrieving appenders. - - - Nicko Cadell - Gert Driesen - - - Gets all attached appenders. - - - A collection of attached appenders. - - - - Gets a collection of attached appenders. - If there are no attached appenders the - implementation should return an empty - collection rather than null. - - - - - Attaches an appender. - - The appender to add. - - - Add the specified appender. The implementation may - choose to allow or deny duplicate appenders. - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Returns an attached appender with the specified. - If no appender with the specified name is found null will be - returned. - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Appenders may delegate their error handling to an . - - - - Error handling is a particularly tedious to get right because by - definition errors are hard to predict and to reproduce. - - - Nicko Cadell - Gert Driesen - - - Handles the error and information about the error condition is passed as - a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - The error code associated with the error. - - - Handles the error and information about the error condition is passed as - a parameter. - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - - - See . - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - - - See . - - - - - Interface for objects that require fixing. - - - - Interface that indicates that the object requires fixing before it - can be taken outside the context of the appender's - method. - - - When objects that implement this interface are stored - in the context properties maps and are fixed - (see ) the - method will be called. - - - Nicko Cadell - - - Get a portable version of this object - - the portable instance of this object - - - Get a portable instance object that represents the current - state of this object. The portable object can be stored - and logged from any thread with identical results. - - - - - Interface that all loggers implement - - - - This interface supports logging events and testing if a level - is enabled for logging. - - - These methods will not throw exceptions. Note to implementor, ensure - that the implementation of these methods cannot allow an exception - to be thrown to the caller. - - - Nicko Cadell - Gert Driesen - - - Gets the name of the logger. - - - The name of the logger. - - - - The name of this logger - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - the exception to log, including its stack trace. Pass null to not log an exception. - - - Generates a logging event for the specified using - the and . - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - - - Base interface for all wrappers - - - - Base interface for all wrappers. - - - All wrappers must implement this interface. - - - Nicko Cadell - - - Get the implementation behind this wrapper object. - - - The object that in implementing this object. - - - - The object that in implementing this - object. The Logger object may not - be the same object as this object because of logger decorators. - This gets the actual underlying objects that is used to process - the log events. - - - - - Interface used to delay activate a configured object. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then the method - must be called by the container after its all the configured properties have been set - and before the component can be used. - - - Nicko Cadell - - - Activate the options that were previously set with calls to properties. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then this method must be called - after its properties have been set before the component can be used. - - - - - Interface used by the to select the . - - - - The uses a - to specify the policy for selecting the correct - to return to the caller. - - - Nicko Cadell - Gert Driesen - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - Gets the for the specified assembly. - - The assembly to use to lookup to the - The for the assembly. - - - Gets the for the specified assembly. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. The results of this method must be repeatable, i.e. - when called again with the same arguments the result must be the - save value. - - - - - Gets the named . - - The name to use to lookup to the . - The named - - Lookup a named . This is the repository created by - calling . - - - - Creates a new repository for the assembly specified. - - The assembly to use to create the domain to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the domain - specified such that a call to with the - same assembly specified will return the same repository instance. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. - - - - - Creates a new repository with the name specified. - - The name to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the name - specified such that a call to with the - same name will return the same repository instance. - - - - - Test if a named repository exists - - the named repository to check - - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - Gets an array of all currently defined repositories. - - - An array of the instances created by - this . - - - Gets an array of all of the repositories created by this selector. - - - - - Test if an triggers an action - - - - Implementations of this interface allow certain appenders to decide - when to perform an appender specific action. - - - The action or behavior triggered is defined by the implementation. - - - Nicko Cadell - - - Test if this event triggers the action - - The event to check - - true if this event triggers the action, otherwise false - - - Return true if this event triggers the action - - - - - Render a as a string. - - - - Interface to abstract the rendering of a - instance into a string. - - - The method is used to render the - date to a text writer. - - - Nicko Cadell - Gert Driesen - - - Formats the specified date as a string. - - The date to format. - The writer to write to. - - - Format the as a string and write it - to the provided. - - - - - Implement this interface to provide customized logging event filtering - - - - Users should implement this interface to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - Decide if the logging event should be logged through an appender. - - The LoggingEvent to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - - - Interface implemented by layout objects - - - - An object is used to format a - as text. The method is called by an - appender to transform the into a string. - - - The layout can also supply and - text that is appender before any events and after all the events respectively. - - - Nicko Cadell - Gert Driesen - - - The content type output by this layout. - - The content type - - - The content type output by this layout. - - - This is a MIME type e.g. "text/plain". - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - Flag indicating if this layout handle exceptions - - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text and output to a writer. - - - If the caller does not have a and prefers the - event to be formatted as a then the following - code can be used to format the event into a . - - - StringWriter writer = new StringWriter(); - Layout.Format(writer, loggingEvent); - string formattedEvent = writer.ToString(); - - - - - Interface for raw layout objects - - - - Interface used to format a - to an object. - - - This interface should not be confused with the - interface. This interface is used in - only certain specialized situations where a raw object is - required rather than a formatted string. The - is not generally useful than this interface. - - - Nicko Cadell - Gert Driesen - - - Implement this method to create your own layout format. - - The event to format - returns the formatted event - - - Implement this method to create your own layout format. - - - - - Implement this interface in order to render objects as strings - - - - Certain types require special case conversion to - string form. This conversion is done by an object renderer. - Object renderers implement the - interface. - - - Nicko Cadell - Gert Driesen - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a - string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - - - Interface implemented by logger repository plugins. - - - - Plugins define additional behavior that can be associated - with a . - The held by the - property is used to store the plugins for a repository. - - - The log4net.Config.PluginAttribute can be used to - attach plugins to repositories created using configuration - attributes. - - - Nicko Cadell - Gert Driesen - - - Gets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - - - Attaches the plugin to the specified . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - Interface used to create plugins. - - - - Interface used to create a plugin. - - - Nicko Cadell - Gert Driesen - - - Creates the plugin object. - - the new plugin instance - - - Create and return a new plugin instance. - - - - - Interface abstracts creation of instances - - - - This interface is used by the to - create new objects. - - - The method is called - to create a named . - - - Implement this interface to create new subclasses of . - - - Nicko Cadell - Gert Driesen - - - Create a new instance - - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - Basic Configurator interface for repositories - - - - Interface used by basic configurator to configure a - with a default . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - Initialize the repository using the specified appender - - the appender to use to log all logging events - - - Configure the repository to route all logging events to the - specified appender. - - - - - Interface implemented by logger repositories. - - - - This interface is implemented by logger repositories. e.g. - . - - - This interface is used by the - to obtain interfaces. - - - Nicko Cadell - Gert Driesen - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - The name of the repository - - - The name of the repository - - - - The name of the repository. - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository. - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - Repository specific properties - - - Repository specific properties - - - - These properties can be specified on a repository specific basis. - - - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - The name of the logger to lookup - The Logger object with the name specified - - - If the names logger exists it is returned, otherwise - null is returned. - - - - - Returns all the currently defined loggers as an Array. - - All the defined loggers - - - Returns all the currently defined loggers as an Array. - - - - - Returns a named logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Returns a named logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - Shutdown the repository - - - Shutting down a repository will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - Log the through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - Configure repository using XML - - - - Interface used by Xml configurator to configure a . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - Initialize the repository using the specified config - - the element containing the root of the config - - - The schema for the XML configuration data is defined by - the implementation. - - - - - Interface supported by type converters - - - - This interface supports conversion from arbitrary types - to a single target type. See . - - - Nicko Cadell - Gert Driesen - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Test if the can be converted to the - type supported by this converter. - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Converts the to the type supported - by this converter. - - - - - Interface supported by type converters - - - - This interface supports conversion from a single type to arbitrary types. - See . - - - Nicko Cadell - - - Returns whether this converter can convert the object to the specified type - - A Type that represents the type you want to convert to - true if the conversion is possible - - - Test if the type supported by this converter can be converted to the - . - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Converts the (which must be of the type supported - by this converter) to the specified.. - - - - - The ILog interface is use by application to log messages into - the log4net framework. - - - - Use the to obtain logger instances - that implement this interface. The - static method is used to get logger instances. - - - This class contains methods for logging at different levels and also - has properties for determining if those logging levels are - enabled in the current configuration. - - - This interface can be implemented in different ways. This documentation - specifies reasonable behavior that a caller can expect from the actual - implementation, however different implementations reserve the right to - do things differently. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - log.Info("Application Start"); - log.Debug("This is a debug message"); - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - Nicko Cadell - Gert Driesen - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - For some ILog interface log, when you write: - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, string construction and concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed (who isn't), then you should write: - - - if (log.IsDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in and once in - the . This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. This is the preferred style of logging. - - Alternatively if your logger is available statically then the is debug - enabled state can be stored in a static variable like this: - - - private static readonly bool isDebugEnabled = log.IsDebugEnabled; - - - Then when you come to log you can write: - - - if (isDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way the debug enabled state is only queried once - when the class is loaded. Using a private static readonly - variable is the most efficient because it is a run time constant - and can be heavily optimized by the JIT compiler. - - - Of course if you use a static readonly variable to - hold the enabled state of the logger then you cannot - change the enabled state at runtime to vary the logging - that is produced. You have to decide if you need absolute - speed or runtime flexibility. - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - Log a message object with the level. - - Log a message object with the level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - Log a formatted string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Log a message object with the level. - - Logs a message object with the level. - - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - Logs a message object with the INFO level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Log a message object with the level. - - Logs a message object with the level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Appender that logs to a database. - - - - appends logging events to a table within a - database. The appender can be configured to specify the connection - string by setting the property. - The connection type (provider) can be specified by setting the - property. For more information on database connection strings for - your specific database see http://www.connectionstrings.com/. - - - Records are written into the database either using a prepared - statement or a stored procedure. The property - is set to (System.Data.CommandType.Text) to specify a prepared statement - or to (System.Data.CommandType.StoredProcedure) to specify a stored - procedure. - - - The prepared statement text or the name of the stored procedure - must be set in the property. - - - The prepared statement or stored procedure can take a number - of parameters. Parameters are added using the - method. This adds a single to the - ordered list of parameters. The - type may be subclassed if required to provide database specific - functionality. The specifies - the parameter name, database type, size, and how the value should - be generated using a . - - - - An example of a SQL Server table that could be logged to: - - CREATE TABLE [dbo].[Log] ( - [ID] [int] IDENTITY (1, 1) NOT NULL , - [Date] [datetime] NOT NULL , - [Thread] [varchar] (255) NOT NULL , - [Level] [varchar] (20) NOT NULL , - [Logger] [varchar] (255) NOT NULL , - [Message] [varchar] (4000) NOT NULL - ) ON [PRIMARY] - - - An example configuration to log to the above table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Julian Biddle - Nicko Cadell - Gert Driesen - Lance Nehring - - - Initializes a new instance of the class. - - - Public default constructor to initialize a new instance of this class. - - - - Flag to indicate if we are using a command object - - - - Set to true when the appender is to use a prepared - statement or stored procedure to insert into the database. - - - - - The list of objects. - - - - The list of objects. - - - - - The security context to use for privileged calls - - - - The that will be used - to insert logging events into a database. - - - - The database command. - - - - Database connection string. - - - - String type name of the type name. - - - - The text of the command. - - - - The command type. - - - - Indicates whether to use transactions when writing to the database. - - - - Indicates whether to use transactions when writing to the database. - - - - Gets or sets the database connection string that is used to connect to - the database. - - - The database connection string used to connect to the database. - - - - The connections string is specific to the connection type. - See for more information. - - - Connection string for MS Access via ODBC: - "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" - Another connection string for MS Access via ODBC: - "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" - Connection string for MS Access via OLE DB: - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" - - - Gets or sets the type name of the connection - that should be created. - - - The type name of the connection. - - - - The type name of the ADO.NET provider to use. - - - The default is to use the OLE DB provider. - - - Use the OLE DB Provider. This is the default value. - System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Use the MS SQL Server Provider. - System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Use the ODBC Provider. - Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for ODBC .NET Data Provider. - - Use the Oracle Provider. - System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for .NET Managed Provider for Oracle. - - - - Gets or sets the command text that is used to insert logging events - into the database. - - - The command text used to insert logging events into the database. - - - - Either the text of the prepared statement or the - name of the stored procedure to execute to write into - the database. - - - The property determines if - this text is a prepared statement or a stored procedure. - - - - - Gets or sets the command type to execute. - - - The command type to execute. - - - - This value may be either (System.Data.CommandType.Text) to specify - that the is a prepared statement to execute, - or (System.Data.CommandType.StoredProcedure) to specify that the - property is the name of a stored procedure - to execute. - - - The default value is (System.Data.CommandType.Text). - - - - - Should transactions be used to insert logging events in the database. - - - true if transactions should be used to insert logging events in - the database, otherwise false. The default value is true. - - - - Gets or sets a value that indicates whether transactions should be used - to insert logging events in the database. - - - When set a single transaction will be used to insert the buffered events - into the database. Otherwise each event will be inserted without using - an explicit transaction. - - - - - Gets or sets the used to call the NetSend method. - - - The used to call the NetSend method. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - Should this appender try to reconnect to the database on error. - - - true if the appender should try to reconnect to the database after an - error has occurred, otherwise false. The default value is false, - i.e. not to try to reconnect. - - - - The default behaviour is for the appender not to try to reconnect to the - database if an error occurs. Subsequent logging events are discarded. - - - To force the appender to attempt to reconnect to the database set this - property to true. - - - When the appender attempts to connect to the database there may be a - delay of up to the connection timeout specified in the connection string. - This delay will block the calling application's thread. - Until the connection can be reestablished this potential delay may occur multiple times. - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to insert - logging events into a database. Classes deriving from - can use this property to get or set this . Use the - underlying returned from if - you require access beyond that which provides. - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Override the parent method to close the database - - - - Closes the database command and database connection. - - - - - Inserts the events into the database. - - The events to insert into the database. - - - Insert all the events specified in the - array into the database. - - - - - Adds a parameter to the command. - - The parameter to add to the command. - - - Adds a parameter to the ordered list of command parameters. - - - - - Writes the events to the database using the transaction specified. - - The transaction that the events will be executed under. - The array of events to insert into the database. - - - The transaction argument can be null if the appender has been - configured not to use transactions. See - property for more information. - - - - - Formats the log message into database statement text. - - The event being logged. - - This method can be overridden by subclasses to provide - more control over the format of the database statement. - - - Text that can be passed to a . - - - - Connects to the database. - - - - Retrieves the class type of the ADO.NET provider. - - - - Gets the Type of the ADO.NET provider to use to connect to the - database. This method resolves the type specified in the - property. - - - Subclasses can override this method to return a different type - if necessary. - - - The of the ADO.NET provider - - - Prepares the database command and initialize the parameters. - - - - Parameter type used by the . - - - - This class provides the basic database parameter properties - as defined by the interface. - - This type can be subclassed to provide database specific - functionality. The two methods that are called externally are - and . - - - - - Initializes a new instance of the class. - - - Default constructor for the AdoNetAppenderParameter class. - - - - The name of this parameter. - - - - The database type for this parameter. - - - - Flag to infer type rather than use the DbType - - - - The precision for this parameter. - - - - The scale for this parameter. - - - - The size for this parameter. - - - - The to use to render the - logging event into an object for this parameter. - - - - Gets or sets the name of this parameter. - - - The name of this parameter. - - - - The name of this parameter. The parameter name - must match up to a named parameter to the SQL stored procedure - or prepared statement. - - - - - Gets or sets the database type for this parameter. - - - The database type for this parameter. - - - - The database type for this parameter. This property should - be set to the database type from the - enumeration. See . - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the type from the value. - - - - - - Gets or sets the precision for this parameter. - - - The precision for this parameter. - - - - The maximum number of digits used to represent the Value. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the precision from the value. - - - - - - Gets or sets the scale for this parameter. - - - The scale for this parameter. - - - - The number of decimal places to which Value is resolved. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the scale from the value. - - - - - - Gets or sets the size for this parameter. - - - The size for this parameter. - - - - The maximum size, in bytes, of the data within the column. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the size from the value. - - - - - - Gets or sets the to use to - render the logging event into an object for this - parameter. - - - The used to render the - logging event into an object for this parameter. - - - - The that renders the value for this - parameter. - - - The can be used to adapt - any into a - for use in the property. - - - - - Prepare the specified database command object. - - The command to prepare. - - - Prepares the database command object by adding - this parameter to its collection of parameters. - - - - - Renders the logging event and set the parameter value in the command. - - The command containing the parameter. - The event to be rendered. - - - Renders the logging event using this parameters layout - object. Sets the value of the parameter on the command object. - - - - - Appends logging events to the terminal using ANSI color escape sequences. - - - - AnsiColorTerminalAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. It also allows the color of a specific level of message to be set. - - - This appender expects the terminal to understand the VT100 control set - in order to interpret the color codes. If the terminal or console does not - understand the control codes the behavior is not defined. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - When configuring the ANSI colored terminal appender, a mapping should be - specified to map a logging level to a color. For example: - - - - - - - - - - - - - - - The Level is the standard log4net logging level and ForeColor and BackColor can be any - of the following values: - - - Blue - - - - - Green - - - - - Red - - - - - White - - - - - Yellow - - - - - Purple - - - - - Cyan - - - - - These color values cannot be combined together to make new colors. - - - The attributes can be any combination of the following: - - - Bright - foreground is brighter - - - Dim - foreground is dimmer - - - Underscore - message is underlined - - - Blink - foreground is blinking (does not work on all terminals) - - - Reverse - foreground and background are reversed - - - Hidden - output is hidden - - - Strikethrough - message has a line through it - - - While any of these attributes may be combined together not all combinations - work well together, for example setting both Bright and Dim attributes makes - no sense. - - - Patrick Wagstrom - Nicko Cadell - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and the color it should be displayed in. - - - - - The mapped foreground color for the specified level - - - - Required property. - The mapped foreground color for the specified level - - - - - The mapped background color for the specified level - - - - Required property. - The mapped background color for the specified level - - - - - The color attributes for the specified level - - - - Required property. - The color attributes for the specified level - - - - - The combined , and - suitable for setting the ansi terminal color. - - - - Initialize the options for the object - - - - Combine the and together - and append the attributes. - - - - - The enum of possible display attributes - - - - The following flags can be combined together to - form the ANSI color attributes. - - - - - - text is underlined - - - - text is dim - - - - text is blinking - - - Not all terminals support this attribute - - - - text is bright - - - - text is displayed with a strikethrough - - - - text is hidden - - - - text and background colors are reversed - - - - The enum of possible foreground or background color values for - use with the color mapping method - - - - The output can be in one for the following ANSI colors. - - - - - - color is yellow - - - - color is white - - - - color is cyan - - - - color is black - - - - color is red - - - - color is blue - - - - color is green - - - - color is magenta - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - Ansi code to reset terminal - - - - Flag to write output to the error stream rather than the standard output stream - - - - Mapping from level object to color value - - - - Target is the value of the console output stream. - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Add a mapping of level to color - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the foreground and background colours - for a level. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - Initialize the options for this appender - - - - Initialize the level to color mappings set on this appender. - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - Initializes a new instance of the AppenderCollection class - that is empty and has the default initial capacity. - - - - Initializes a new instance of the AppenderCollection class - that has the specified initial capacity. - - - The number of elements that the new AppenderCollection is initially capable of storing. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified AppenderCollection. - - The AppenderCollection whose elements are copied to the new collection. - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - Allow subclasses to avoid our default constructors - - - - - - Supports simple iteration over a . - - - - - Initializes a new instance of the Enumerator class. - - - - - Gets the current element in the collection. - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - A value - - - - An empty readonly static AppenderCollection - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - - is less than zero - -or- - - is equal to or greater than . - - - - Gets the number of elements actually contained in the AppenderCollection. - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the collection. - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - Gets or sets the number of elements the AppenderCollection can contain. - - - - Creates a read-only wrapper for a AppenderCollection instance. - - list to create a readonly wrapper arround - - An AppenderCollection wrapper that is read-only. - - - - Copies the entire AppenderCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - Copies the entire AppenderCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - Adds a to the end of the AppenderCollection. - - The to be added to the end of the AppenderCollection. - The index at which the value has been added. - - - Removes all elements from the AppenderCollection. - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - Determines whether a given is in the AppenderCollection. - - The to check for. - - true if is found in the AppenderCollection; otherwise, false. - - - Returns the zero-based index of the first occurrence of a - in the AppenderCollection. - - The to locate in the AppenderCollection. - - The zero-based index of the first occurrence of - in the entire AppenderCollection, if found; otherwise, -1. - - - - Inserts an element into the AppenderCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - is less than zero - -or- - - is equal to or greater than . - - - - Removes the first occurrence of a specific from the AppenderCollection. - - The to remove from the AppenderCollection. - - The specified was not found in the AppenderCollection. - - - - Removes the element at the specified index of the AppenderCollection. - - The zero-based index of the element to remove. - - - is less than zero - -or- - - is equal to or greater than . - - - - Returns an enumerator that can iterate through the AppenderCollection. - - An for the entire AppenderCollection. - - - Adds the elements of another AppenderCollection to the current AppenderCollection. - - The AppenderCollection whose elements should be added to the end of the current AppenderCollection. - The new of the AppenderCollection. - - - Adds the elements of a array to the current AppenderCollection. - - The array whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - Adds the elements of a collection to the current AppenderCollection. - - The collection whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - Sets the capacity to the actual number of elements. - - - - Return the collection elements as an array - - the array - - - - is less than zero - -or- - - is equal to or greater than . - - - - - is less than zero - -or- - - is equal to or greater than . - - - - Abstract base class implementation of . - - - - This class provides the code for common functionality, such - as support for threshold filtering and support for general filters. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - Empty default constructor - - - - Initial buffer size - - - - Maximum buffer size before it is recycled - - - - The layout of this appender. - - - See for more information. - - - - The name of this appender. - - - See for more information. - - - - The level threshold of this appender. - - - - There is no level threshold filtering by default. - - - See for more information. - - - - - It is assumed and enforced that errorHandler is never null. - - - - It is assumed and enforced that errorHandler is never null. - - - See for more information. - - - - - The first filter in the filter chain. - - - - Set to null initially. - - - See for more information. - - - - - The last filter in the filter chain. - - - See for more information. - - - - Flag indicating if this appender is closed. - - - See for more information. - - - - The guard prevents an appender from repeatedly calling its own DoAppend method - - - - StringWriter used to render events - - - - Gets or sets the threshold of this appender. - - - The threshold of the appender. - - - - All log events with lower level than the threshold level are ignored - by the appender. - - - In configuration files this option is specified by setting the - value of the option to a level - string, such as "DEBUG", "INFO" and so on. - - - - - Gets or sets the for this appender. - - The of the appender - - - The provides a default - implementation for the property. - - - - - The filter chain. - - The head of the filter chain filter chain. - - - Returns the head Filter. The Filters are organized in a linked list - and so all Filters on this Appender are available through the result. - - - - - Gets or sets the for this appender. - - The layout of the appender. - - - See for more information. - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - - The name uniquely identifies the appender. - - - - - Tests if this appender requires a to be set. - - - - In the rather exceptional case, where the appender - implementation admits a layout but can also work without it, - then the appender should return true. - - - This default implementation always returns true. - - - - true if the appender requires a layout object, otherwise false. - - - - Finalizes this appender by calling the implementation's - method. - - - - If this appender has not been closed then the Finalize method - will call . - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Closes the appender and release resources. - - - - Release any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - This method cannot be overridden by subclasses. This method - delegates the closing of the appender to the - method which must be overridden in the subclass. - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The event to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the abstract method. - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The array of events to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the method. - - - - - Test if the logging event should we output by this appender - - the event to test - - true if the event should be output, false if the event should be ignored - - - This method checks the logging event against the threshold level set - on this appender and also against the filters specified on this - appender. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - - - - Adds a filter to the end of the filter chain. - - the filter to add to this appender - - - The Filters are organized in a linked list. - - - Setting this property causes the new filter to be pushed onto the - back of the filter chain. - - - - - Clears the filter list for this appender. - - - - Clears the filter list for this appender. - - - - - Checks if the message level is below this appender's threshold. - - - to test against. - - - If there is no threshold set, then the return value is always true. - - - - true if the meets the - requirements of this appender. - - - - Is called when the appender is closed. Derived classes should override - this method if resources need to be released. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - Subclasses of should implement this method - to perform actual logging. - - The event to append. - - - A subclass must implement this method to perform - logging of the . - - This method will be called by - if all the conditions listed for that method are met. - - - To restrict the logging of events in the appender - override the method. - - - - - Append a bulk array of logging events. - - the array of logging events - - - This base class implementation calls the - method for each element in the bulk array. - - - A sub class that can better process a bulk array of events should - override this method in addition to . - - - - - Called before as a precondition. - - - - This method is called by - before the call to the abstract method. - - - This method can be overridden in a subclass to extend the checks - made before the event is passed to the method. - - - A subclass should ensure that they delegate this call to - this base class if it is overridden. - - - - true if the call to should proceed. - - - Renders the to a string. - - The event to render. - The event rendered as a string. - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Where possible use the alternative version of this method - . - That method streams the rendering onto an existing Writer - which can give better performance if the caller already has - a open and ready for writing. - - - - - Renders the to a string. - - The event to render. - The TextWriter to write the formatted event to - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Use this method in preference to - where possible. If, however, the caller needs to render the event - to a string then does - provide an efficient mechanism for doing so. - - - - - - Appends log events to the ASP.NET system. - - - - - Diagnostic information and tracing messages that you specify are appended to the output - of the page that is sent to the requesting browser. Optionally, you can view this information - from a separate trace viewer (Trace.axd) that displays trace information for every page in a - given application. - - - Trace statements are processed and displayed only when tracing is enabled. You can control - whether tracing is displayed to a page, to the trace viewer, or both. - - - The logging event is passed to the or - method depending on the level of the logging event. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Write the logging event to the ASP.NET trace - - the event to log - - - Write the logging event to the ASP.NET trace - HttpContext.Current.Trace - (). - - - - - Abstract base class implementation of that - buffers events in a fixed size buffer. - - - - This base class should be used by appenders that need to buffer a - number of events before logging them. For example the - buffers events and then submits the entire contents of the buffer to - the underlying database in one go. - - - Subclasses should override the - method to deliver the buffered events. - - The BufferingAppenderSkeleton maintains a fixed size cyclic - buffer of events. The size of the buffer is set using - the property. - - A is used to inspect - each event as it arrives in the appender. If the - triggers, then the current buffer is sent immediately - (see ). Otherwise the event - is stored in the buffer. For example, an evaluator can be used to - deliver the events immediately when an ERROR event arrives. - - - The buffering appender can be configured in a mode. - By default the appender is NOT lossy. When the buffer is full all - the buffered events are sent with . - If the property is set to true then the - buffer will not be sent when it is full, and new events arriving - in the appender will overwrite the oldest event in the buffer. - In lossy mode the buffer will only be sent when the - triggers. This can be useful behavior when you need to know about - ERROR events but not about events with a lower level, configure an - evaluator that will trigger when an ERROR event arrives, the whole - buffer will be sent which gives a history of events leading up to - the ERROR event. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Protected default constructor to allow subclassing. - - - - - Initializes a new instance of the class. - - the events passed through this appender must be - fixed by the time that they arrive in the derived class' SendBuffer method. - - - Protected constructor to allow subclassing. - - - The should be set if the subclass - expects the events delivered to be fixed even if the - is set to zero, i.e. when no buffering occurs. - - - - - The default buffer size. - - - The default size of the cyclic buffer used to store events. - This is set to 512 by default. - - - - The size of the cyclic buffer used to hold the logging events. - - - Set to by default. - - - - The cyclic buffer used to store the logging events. - - - - The triggering event evaluator that causes the buffer to be sent immediately. - - - The object that is used to determine if an event causes the entire - buffer to be sent immediately. This field can be null, which - indicates that event triggering is not to be done. The evaluator - can be set using the property. If this appender - has the ( property) set to - true then an must be set. - - - - Indicates if the appender should overwrite events in the cyclic buffer - when it becomes full, or if the buffer should be flushed when the - buffer is full. - - - If this field is set to true then an must - be set. - - - - The triggering event evaluator filters discarded events. - - - The object that is used to determine if an event that is discarded should - really be discarded or if it should be sent to the appenders. - This field can be null, which indicates that all discarded events will - be discarded. - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - The events delivered to the subclass must be fixed. - - - - Gets or sets a value that indicates whether the appender is lossy. - - - true if the appender is lossy, otherwise false. The default is false. - - - - This appender uses a buffer to store logging events before - delivering them. A triggering event causes the whole buffer - to be send to the remote sink. If the buffer overruns before - a triggering event then logging events could be lost. Set - to false to prevent logging events - from being lost. - - If is set to true then an - must be specified. - - - - Gets or sets the size of the cyclic buffer used to hold the - logging events. - - - The size of the cyclic buffer used to hold the logging events. - - - - The option takes a positive integer - representing the maximum number of logging events to collect in - a cyclic buffer. When the is reached, - oldest events are deleted as new events are added to the - buffer. By default the size of the cyclic buffer is 512 events. - - - If the is set to a value less than - or equal to 1 then no buffering will occur. The logging event - will be delivered synchronously (depending on the - and properties). Otherwise the event will - be buffered. - - - - - Gets or sets the that causes the - buffer to be sent immediately. - - - The that causes the buffer to be - sent immediately. - - - - The evaluator will be called for each event that is appended to this - appender. If the evaluator triggers then the current buffer will - immediately be sent (see ). - - If is set to true then an - must be specified. - - - - Gets or sets the value of the to use. - - - The value of the to use. - - - - The evaluator will be called for each event that is discarded from this - appender. If the evaluator triggers then the current buffer will immediately - be sent (see ). - - - - - Gets or sets a value indicating if only part of the logging event data - should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the - event data to be fixed and serialized. This will improve performance. - - - See for more information. - - - - - Gets or sets a the fields that will be fixed in the event - - - The event fields that will be fixed before the event is buffered - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - Flush the currently buffered events - - - - Flushes any events that have been buffered. - - - If the appender is buffering in mode then the contents - of the buffer will NOT be flushed to the appender. - - - - - Flush the currently buffered events - - set to true to flush the buffer of lossy events - - - Flushes events that have been buffered. If is - false then events will only be flushed if this buffer is non-lossy mode. - - - If the appender is buffering in mode then the contents - of the buffer will only be flushed if is true. - In this case the contents of the buffer will be tested against the - and if triggering will be output. All other buffered - events will be discarded. - - - If is true then the buffer will always - be emptied by calling this method. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Close this appender instance. - - - - Close this appender instance. If this appender is marked - as not then the remaining events in - the buffer must be sent when the appender is closed. - - - - - This method is called by the method. - - the event to log - - - Stores the in the cyclic buffer. - - - The buffer will be sent (i.e. passed to the - method) if one of the following conditions is met: - - - - The cyclic buffer is full and this appender is - marked as not lossy (see ) - - - An is set and - it is triggered for the - specified. - - - - Before the event is stored in the buffer it is fixed - (see ) to ensure that - any data referenced by the event will be valid when the buffer - is processed. - - - - - Sends the contents of the buffer. - - The first logging event. - The buffer containing the events that need to be send. - - - The subclass must override . - - - - - Sends the events. - - The events that need to be send. - - - The subclass must override this method to process the buffered events. - - - - - Buffers events and then forwards them to attached appenders. - - - - The events are buffered in this appender until conditions are - met to allow the appender to deliver the events to the attached - appenders. See for the - conditions that cause the buffer to be sent. - - The forwarding appender can be used to specify different - thresholds and filters for the same appender at different locations - within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Implementation of the interface - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - Send the events. - - The events that need to be send. - - - Forwards the events to the attached appenders. - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this buffering appender. - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - Appends logging events to the console. - - - - ConsoleAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - - The instance of the class is set up to write - to the standard output stream. - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - flag set to true to write to the console error stream - - When is set to true, output is written to - the standard error output stream. Otherwise, output is written to the standard - output stream. - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - debug system. - - - Events are written using the - method. The event's logger name is passed as the value for the category name to the Write method. - - - Nicko Cadell - - - Initializes a new instance of the . - - - - Default constructor. - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - If is true then the - is called. - - - - - Writes events to the system event log. - - - - The EventID of the event log entry can be - set using the EventLogEventID property () - on the . - - - There is a limit of 32K characters for an event log message - - - When configuring the EventLogAppender a mapping can be - specified to map a logging level to an event log entry type. For example: - - - <mapping> - <level value="ERROR" /> - <eventLogEntryType value="Error" /> - </mapping> - <mapping> - <level value="DEBUG" /> - <eventLogEntryType value="Information" /> - </mapping> - - - The Level is the standard log4net logging level and eventLogEntryType can be any value - from the enum, i.e.: - - - Error - an error event - - - Warning - a warning event - - - Information - an informational event - - - - Aspi Havewala - Douglas de la Torre - Nicko Cadell - Gert Driesen - Thomas Voss - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Initializes a new instance of the class - with the specified . - - The to use with this appender. - - - Obsolete constructor. - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and its event log entry type. - - - - - The for this entry - - - - Required property. - The for this entry - - - - - The log name is the section in the event logs where the messages - are stored. - - - - Name of the application to use when logging. This appears in the - application column of the event log named by . - - - - The name of the machine which holds the event log. This is - currently only allowed to be '.' i.e. the current machine. - - - - Mapping from level object to EventLogEntryType - - - - The security context to use for privileged calls - - - - The name of the log where messages will be stored. - - - The string name of the log where messages will be stored. - - - This is the name of the log as it appears in the Event Viewer - tree. The default value is to log into the Application - log, this is where most applications write their events. However - if you need a separate log for your application (or applications) - then you should set the appropriately. - This should not be used to distinguish your event log messages - from those of other applications, the - property should be used to distinguish events. This property should be - used to group together events into a single log. - - - - - Property used to set the Application name. This appears in the - event logs when logging. - - - The string used to distinguish events from different sources. - - - Sets the event log source property. - - - - This property is used to return the name of the computer to use - when accessing the event logs. Currently, this is the current - computer, denoted by a dot "." - - - The string name of the machine holding the event log that - will be logged into. - - - This property cannot be changed. It is currently set to '.' - i.e. the local machine. This may be changed in future. - - - - Gets or sets the used to write to the EventLog. - - - The used to write to the EventLog. - - - - The system security context used to write to the EventLog. - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Add a mapping of level to - done by the config file - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the event log entry type for a level. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Create an event log source - - - Uses different API calls under NET_2_0 - - - - This method is called by the - method. - - the event to log - - Writes the event to the system event log using the - . - If the event has an EventID property (see ) - set then this integer will be used as the event log event id. - - There is a limit of 32K characters for an event log message - - - - - Get the equivalent for a - the Level to convert to an EventLogEntryType - The equivalent for a - - Because there are fewer applicable - values to use in logging levels than there are in the - this is a one way mapping. There is - a loss of information during the conversion. - - - - Appends logging events to a file. - - - - Logging events are sent to the file specified by - the property. - - - The file can be opened in either append or overwrite mode - by specifying the property. - If the file path is relative it is taken as relative from - the application base directory. The file encoding can be - specified by setting the property. - - - The layout's and - values will be written each time the file is opened and closed - respectively. If the property is - then the file may contain multiple copies of the header and footer. - - - This appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - The supports pluggable file locking models via - the property. - The default behavior, implemented by - is to obtain an exclusive write lock on the file until this appender is closed. - The alternative model, , only holds a - write lock while the appender is writing a logging event. - - - Nicko Cadell - Gert Driesen - Rodrigo B. de Oliveira - Douglas de la Torre - Niall Daley - - - Default constructor - - - - Default constructor - - - - - Construct a new appender using the layout, file and append mode. - - the layout to use with this appender - the full path to the file to write to - flag to indicate if the file should be appended to - - - Obsolete constructor. - - - - - Construct a new appender using the layout and file specified. - The file will be appended to. - - the layout to use with this appender - the full path to the file to write to - - - Obsolete constructor. - - - - - Write only that uses the - to manage access to an underlying resource. - - - - True asynchronous writes are not supported, the implementation forces a synchronous write. - - - - Locking model base class - - - - Base class for the locking models available to the derived loggers. - - - - - Gets or sets the for this LockingModel - - - The for this LockingModel - - - - The file appender this locking model is attached to and working on - behalf of. - - - The file appender is used to locate the security context and the error handler to use. - - - The value of this property will be set before is - called. - - - - - Open the output file - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - Hold an exclusive lock on the output file - - - - Open the file once for writing and hold it open until is called. - Maintains an exclusive lock on the file during this time. - - - - - Open the file specified and prepare for logging. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Does nothing. The lock is already taken - - - - - Release the lock on the file - - - - Does nothing. The lock will be released when the file is closed. - - - - - Acquires the file lock for each write - - - - Opens the file once for each / cycle, - thus holding the lock for the minimal amount of time. This method of locking - is considerably slower than but allows - other processes to move/delete the log file whilst logging continues. - - - - - Prepares to open the file when the first message is logged. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - Flag to indicate if we should append to the file - or overwrite the file. The default is to append. - - - - The name of the log file. - - - - The encoding to use for the file stream. - - - - The security context to use for privileged calls - - - - The stream to log to. Has added locking semantics - - - - The locking model to use - - - - Gets or sets the path to the file that logging will be written to. - - - The path to the file that logging will be written to. - - - - If the path is relative it is taken as relative from - the application base directory. - - - - - Gets or sets a flag that indicates whether the file should be - appended to or overwritten. - - - Indicates whether the file should be appended to or overwritten. - - - - If the value is set to false then the file will be overwritten, if - it is set to true then the file will be appended to. - - The default value is true. - - - - Gets or sets used to write to the file. - - - The used to write to the file. - - - - The default encoding set is - which is the encoding for the system's current ANSI code page. - - - - - Gets or sets the used to write to the file. - - - The used to write to the file. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - Gets or sets the used to handle locking of the file. - - - The used to lock the file. - - - - Gets or sets the used to handle locking of the file. - - - There are two built in locking models, and . - The former locks the file from the start of logging to the end and the - later lock only for the minimal amount of time when logging each message. - - - The default locking model is the . - - - - - Activate the options on the file appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This will cause the file to be opened. - - - - - Closes any previously opened file and calls the parent's . - - - - Resets the filename and the file stream. - - - - - Called to initialize the file writer - - - - Will be called for each logged message until the file is - successfully opened. - - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - This method is called by the - method. - - The array of events to log. - - - Acquires the output file locks once before writing all the events to - the stream. - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - Closes the previously opened file. - - - - Writes the to the file and then - closes the file. - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - Calls but guarantees not to throw an exception. - Errors are passed to the . - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - If there was already an opened file, then the previous file - is closed first. - - - This method will ensure that the directory structure - for the specified exists. - - - - - Sets the quiet writer used for file output - - the file stream that has been opened for writing - - - This implementation of creates a - over the and passes it to the - method. - - - This method can be overridden by sub classes that want to wrap the - in some way, for example to encrypt the output - data using a System.Security.Cryptography.CryptoStream. - - - - - Sets the quiet writer being used. - - the writer over the file stream that has been opened for writing - - - This method can be overridden by sub classes that want to - wrap the in some way. - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - This appender forwards logging events to attached appenders. - - - - The forwarding appender can be used to specify different thresholds - and filters for the same appender at different locations within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Implementation of the interface - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - Forward the logging event to the attached appenders - - The event to log. - - - Delivers the logging event to all the attached appenders. - - - - - Forward the logging events to the attached appenders - - The array of events to log. - - - Delivers the logging events to all the attached appenders. - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this appender. - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - Logs events to a local syslog service. - - - - This appender uses the POSIX libc library functions openlog, syslog, and closelog. - If these functions are not available on the local system then this appender will not work! - - - The functions openlog, syslog, and closelog are specified in SUSv2 and - POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. - - - This appender talks to a local syslog service. If you need to log to a remote syslog - daemon and you cannot configure your local syslog service to do this you may be - able to use the to log via UDP. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a local syslog service. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - syslog severities - - - - The log4net Level maps to a syslog severity using the - method and the - class. The severity is set on . - - - - - critical conditions - - - - error conditions - - - - debug-level messages - - - - normal but significant condition - - - - informational - - - - action must be taken immediately - - - - system is unusable - - - - warning conditions - - - - syslog facilities - - - - The syslog facility defines which subsystem the logging comes from. - This is set on the property. - - - - - kernel messages - - - - line printer subsystem - - - - reserved for local use - - - - NTP subsystem - - - - log audit - - - - clock (cron/at) daemon - - - - log alert - - - - reserved for local use - - - - ftp daemon - - - - reserved for local use - - - - random user-level messages - - - - network news subsystem - - - - security/authorization messages - - - - reserved for local use - - - - reserved for local use - - - - UUCP subsystem - - - - security/authorization messages (private) - - - - messages generated internally by syslogd - - - - mail system - - - - system daemons - - - - reserved for local use - - - - reserved for local use - - - - reserved for local use - - - - clock daemon - - - - The facility. The default facility is . - - - - The message identity - - - - Marshaled handle to the identity string. We have to hold on to the - string as the openlog and syslog APIs just hold the - pointer to the ident and dereference it for each log message. - - - - Mapping from level object to syslog severity - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Add a mapping of level to severity - - The mapping to add - - - Adds a to this appender. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - Close the syslog when the appender is closed - - - - Close the syslog when the appender is closed - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - Open connection to system logger. - - - - Generate a log message. - - - - The libc syslog method takes a format string and a variable argument list similar - to the classic printf function. As this type of vararg list is not supported - by C# we need to specify the arguments explicitly. Here we have specified the - format string with a single message argument. The caller must set the format - string to "%s". - - - - - Close descriptor used to write to system logger. - - - - Stores logging events in an array. - - - - The memory appender stores all the logging events - that are appended in an in-memory array. - - - Use the method to get - the current list of events that have been appended. - - - Use the method to clear the - current list of events. - - - Julian Biddle - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - The list of events that have been appended. - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - Gets or sets a value indicating whether only part of the logging event - data should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the event - data to be fixed and stored in the appender, hereby improving performance. - - - See for more information. - - - - - Gets or sets the fields that will be fixed in the event - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - Gets the events that have been logged. - - The events that have been logged - - - Gets the events that have been logged. - - - - - This method is called by the method. - - the event to log - - Stores the in the events list. - - - - Clear the list of events - - - Clear the list of events - - - - Logs events to a remote syslog daemon. - - - - The BSD syslog protocol is used to remotely log to - a syslog daemon. The syslogd listens for for messages - on UDP port 514. - - - The syslog UDP protocol is not authenticated. Most syslog daemons - do not accept remote log messages because of the security implications. - You may be able to use the LocalSyslogAppender to talk to a local - syslog service. - - - There is an RFC 3164 that claims to document the BSD Syslog Protocol. - This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. - This appender generates what the RFC calls an "Original Device Message", - i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation - this format of message will be accepted by all current syslog daemon - implementations. The daemon will attach the current time and the source - hostname or IP address to any messages received. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a remote syslog daemon. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - syslog severities - - - - The syslog severities. - - - - - critical conditions - - - - error conditions - - - - debug-level messages - - - - normal but significant condition - - - - informational - - - - action must be taken immediately - - - - system is unusable - - - - warning conditions - - - - syslog facilities - - - - The syslog facilities - - - - - kernel messages - - - - line printer subsystem - - - - reserved for local use - - - - NTP subsystem - - - - log audit - - - - clock (cron/at) daemon - - - - log alert - - - - reserved for local use - - - - ftp daemon - - - - reserved for local use - - - - random user-level messages - - - - network news subsystem - - - - security/authorization messages - - - - reserved for local use - - - - reserved for local use - - - - UUCP subsystem - - - - security/authorization messages (private) - - - - messages generated internally by syslogd - - - - mail system - - - - system daemons - - - - reserved for local use - - - - reserved for local use - - - - reserved for local use - - - - clock daemon - - - - Syslog port 514 - - - - The facility. The default facility is . - - - - The message identity - - - - Mapping from level object to syslog severity - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - Add a mapping of level to severity - - The mapping to add - - - Add a mapping to this appender. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - Initialize the options for this appender - - - - Initialize the level to syslog severity mappings set on this appender. - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - Generate a syslog priority. - - - - - Delivers logging events to a remote logging sink. - - - - This Appender is designed to deliver events to a remote sink. - That is any object that implements the - interface. It delivers the events using .NET remoting. The - object to deliver events to is specified by setting the - appenders property. - - The RemotingAppender buffers events before sending them. This allows it to - make more efficient use of the remoting infrastructure. - - Once the buffer is full the events are still not sent immediately. - They are scheduled to be sent using a pool thread. The effect is that - the send occurs asynchronously. This is very important for a - number of non obvious reasons. The remoting infrastructure will - flow thread local variables (stored in the ), - if they are marked as , across the - remoting boundary. If the server is not contactable then - the remoting infrastructure will clear the - objects from the . To prevent a logging failure from - having side effects on the calling application the remoting call must be made - from a separate thread to the one used by the application. A - thread is used for this. If no thread is available then - the events will block in the thread pool manager until a thread is available. - - Because the events are sent asynchronously using pool threads it is possible to close - this appender before all the queued events have been sent. - When closing the appender attempts to wait until all the queued events have been sent, but - this will timeout after 30 seconds regardless. - - If this appender is being closed because the - event has fired it may not be possible to send all the queued events. During process - exit the runtime limits the time that a - event handler is allowed to run for. If the runtime terminates the threads before - the queued events have been sent then they will be lost. To ensure that all events - are sent the appender must be closed before the application exits. See - for details on how to shutdown - log4net programmatically. - - - Nicko Cadell - Gert Driesen - Daniel Cazzulino - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - The URL of the remote sink. - - - - The local proxy (.NET remoting) for the remote logging sink. - - - - The number of queued callbacks currently waiting or executing - - - - Event used to signal when there are no queued work items - - - This event is set when there are no queued work items. In this - state it is safe to close the appender. - - - - Gets or sets the URL of the well-known object that will accept - the logging events. - - - The well-known URL of the remote sink. - - - - The URL of the remoting sink that will accept logging events. - The sink must implement the - interface. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Send the contents of the buffer to the remote sink. - - - The events are not sent immediately. They are scheduled to be sent - using a pool thread. The effect is that the send occurs asynchronously. - This is very important for a number of non obvious reasons. The remoting - infrastructure will flow thread local variables (stored in the ), - if they are marked as , across the - remoting boundary. If the server is not contactable then - the remoting infrastructure will clear the - objects from the . To prevent a logging failure from - having side effects on the calling application the remoting call must be made - from a separate thread to the one used by the application. A - thread is used for this. If no thread is available then - the events will block in the thread pool manager until a thread is available. - - The events to send. - - - Override base class close. - - - - This method waits while there are queued work items. The events are - sent asynchronously using work items. These items - will be sent once a thread pool thread is available to send them, therefore - it is possible to close the appender before all the queued events have been - sent. - - This method attempts to wait until all the queued events have been sent, but this - method will timeout after 30 seconds regardless. - - If the appender is being closed because the - event has fired it may not be possible to send all the queued events. During process - exit the runtime limits the time that a - event handler is allowed to run for. - - - - A work item is being queued into the thread pool - - - - A work item from the thread pool has completed - - - - Send the contents of the buffer to the remote sink. - - - This method is designed to be used with the . - This method expects to be passed an array of - objects in the state param. - - the logging events to send - - - Appender that rolls log files based on size or date or both. - - - - RollingFileAppender can roll log files based on size or date or both - depending on the setting of the property. - When set to the log file will be rolled - once its size exceeds the . - When set to the log file will be rolled - once the date boundary specified in the property - is crossed. - When set to the log file will be - rolled once the date boundary specified in the property - is crossed, but within a date boundary the file will also be rolled - once its size exceeds the . - When set to the log file will be rolled when - the appender is configured. This effectively means that the log file can be - rolled once per program execution. - - - A of few additional optional features have been added: - - Attach date pattern for current log file - Backup number increments for newer files - Infinite number of backups by file size - - - - For large or infinite numbers of backup files a - greater than zero is highly recommended, otherwise all the backup files need - to be renamed each time a new backup is created. - - - When Date/Time based rolling is used setting - to will reduce the number of file renamings to few or none. - - - - - Changing or without clearing - the log file directory of backup files will cause unexpected and unwanted side effects. - - - - If Date/Time based rolling is enabled this appender will attempt to roll existing files - in the directory without a Date/Time tag based on the last write date of the base log file. - The appender only rolls the log file when a message is logged. If Date/Time based rolling - is enabled then the appender will not roll the log file at the Date/Time boundary but - at the point when the next message is logged after the boundary has been crossed. - - - The extends the and - has the same behavior when opening the log file. - The appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - When rolling a backup file necessitates deleting an older backup file the - file to be deleted is moved to a temporary name before being deleted. - - - - A maximum number of backup files when rolling on date/time boundaries is not supported. - - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - Edward Smit - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Default implementation of that returns the current time. - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - Style of rolling to use - - - - Style of rolling to use - - - - - Roll files based on both the size and date of the file - - - - Roll files once per program execution - - - - Roll files once per program execution. - Well really once each time this appender is - configured. - - - Setting this option also sets AppendToFile to - false on the RollingFileAppender, otherwise - this appender would just be a normal file appender. - - - - - Roll files based only on the size of the file - - - - Roll files based only on the date - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - - Roll the log not based on the date - - - - Roll the log for each minute - - - - Roll the log each day (midnight) - - - - Roll the log each month - - - - Roll the log each week - - - - Roll the log twice a day (midday and midnight) - - - - Roll the log for each hour - - - - This object supplies the current date/time. Allows test code to plug in - a method to control this class when testing date/time based rolling. - - - - The date pattern. By default, the pattern is set to ".yyyy-MM-dd" - meaning daily rollover. - - - - The actual formatted filename that is currently being written to - or will be the file transferred to on roll over - (based on staticLogFileName). - - - - The timestamp when we shall next recompute the filename. - - - - Holds date of last roll over - - - - The type of rolling done - - - - The default maximum file size is 10MB - - - - There is zero backup files by default - - - - How many sized based backups have been made so far - - - - The rolling file count direction. - - - - The rolling mode used in this appender. - - - - Cache flag set if we are rolling by date. - - - - Cache flag set if we are rolling by size. - - - - Value indicating whether to always log to the same file. - - - - FileName provided in configuration. Used for rolling properly - - - - The 1st of January 1970 in UTC - - - - Gets or sets the date pattern to be used for generating file names - when rolling over on date. - - - The date pattern to be used for generating file names when rolling - over on date. - - - - Takes a string in the same format as expected by - . - - - This property determines the rollover schedule when rolling over - on date. - - - - - Gets or sets the maximum number of backup files that are kept before - the oldest is erased. - - - The maximum number of backup files that are kept before the oldest is - erased. - - - - If set to zero, then there will be no backup files and the log file - will be truncated when it reaches . - - - If a negative number is supplied then no deletions will be made. Note - that this could result in very slow performance as a large number of - files are rolled over unless is used. - - - The maximum applies to each time based group of files and - not the total. - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size in bytes that the output file is allowed to reach before being - rolled over to backup files. - - - - This property is equivalent to except - that it is required for differentiating the setter taking a - argument from the setter taking a - argument. - - - The default maximum file size is 10MB (10*1024*1024). - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size that the output file is allowed to reach before being - rolled over to backup files. - - - - This property allows you to specify the maximum size with the - suffixes "KB", "MB" or "GB" so that the size is interpreted being - expressed respectively in kilobytes, megabytes or gigabytes. - - - For example, the value "10KB" will be interpreted as 10240 bytes. - - - The default maximum file size is 10MB. - - - If you have the option to set the maximum file size programmatically - consider using the property instead as this - allows you to set the size in bytes as a . - - - - - Gets or sets the rolling file count direction. - - - The rolling file count direction. - - - - Indicates if the current file is the lowest numbered file or the - highest numbered file. - - - By default newer files have lower numbers ( < 0), - i.e. log.1 is most recent, log.5 is the 5th backup, etc... - - - >= 0 does the opposite i.e. - log.1 is the first backup made, log.5 is the 5th backup made, etc. - For infinite backups use >= 0 to reduce - rollover costs. - - The default file count direction is -1. - - - - Gets or sets the rolling style. - - The rolling style. - - - The default rolling style is . - - - When set to this appender's - property is set to false, otherwise - the appender would append to a single file rather than rolling - the file each time it is opened. - - - - - Gets or sets a value indicating whether to always log to - the same file. - - - true if always should be logged to the same file, otherwise false. - - - - By default file.log is always the current file. Optionally - file.log.yyyy-mm-dd for current formatted datePattern can by the currently - logging file (or file.log.curSizeRollBackup or even - file.log.yyyy-mm-dd.curSizeRollBackup). - - - This will make time based rollovers with a large number of backups - much faster as the appender it won't have to rename all the backups! - - - - - Sets the quiet writer being used. - - - This method can be overridden by sub classes. - - the writer to set - - - Write out a logging event. - - the event to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - Write out an array of logging events. - - the events to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - Performs any required rolling before outputting the next event - - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - Creates and opens the file for logging. If - is false then the fully qualified name is determined and used. - - the name of the file to open - true to append to existing file - - This method will ensure that the directory structure - for the specified exists. - - - - Get the current output file name - - the base file name - the output file name - - The output file name is based on the base fileName specified. - If is set then the output - file name is the same as the base file passed in. Otherwise - the output file depends on the date pattern, on the count - direction or both. - - - - Determines curSizeRollBackups (only within the current roll point) - - - - Generates a wildcard pattern that can be used to find all files - that are similar to the base file name. - - - - - - Builds a list of filenames for all files matching the base filename plus a file - pattern. - - - - - - Initiates a roll over if needed for crossing a date boundary since the last run. - - - - Initializes based on existing conditions at time of . - - - - Initializes based on existing conditions at time of . - The following is done - - determine curSizeRollBackups (only within the current roll point) - initiates a roll over if needed for crossing a date boundary since the last run. - - - - - Does the work of bumping the 'current' file counter higher - to the highest count when an incremental file name is seen. - The highest count is either the first file (when count direction - is greater than 0) or the last file (when count direction less than 0). - In either case, we want to know the highest count that is present. - - - - - - Takes a list of files and a base file name, and looks for - 'incremented' versions of the base file. Bumps the max - count up to the highest count seen. - - - - - - Calculates the RollPoint for the datePattern supplied. - - the date pattern to calculate the check period for - The RollPoint that is most accurate for the date pattern supplied - - Essentially the date pattern is examined to determine what the - most suitable roll point is. The roll point chosen is the roll point - with the smallest period that can be detected using the date pattern - supplied. i.e. if the date pattern only outputs the year, month, day - and hour then the smallest roll point that can be detected would be - and hourly roll point as minutes could not be detected. - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Sets initial conditions including date/time roll over information, first check, - scheduledFilename, and calls to initialize - the current number of backups. - - - - - Rollover the file(s) to date/time tagged file(s). - - set to true if the file to be rolled is currently open - - - Rollover the file(s) to date/time tagged file(s). - Resets curSizeRollBackups. - If fileIsOpen is set then the new file is opened (through SafeOpenFile). - - - - - Renames file to file . - - Name of existing file to roll. - New name for file. - - - Renames file to file . It - also checks for existence of target file and deletes if it does. - - - - - Test if a file exists at a specified path - - the path to the file - true if the file exists - - - Test if a file exists at a specified path - - - - - Deletes the specified file if it exists. - - The file to delete. - - - Delete a file if is exists. - The file is first moved to a new filename then deleted. - This allows the file to be removed even when it cannot - be deleted, but it still can be moved. - - - - - Implements file roll base on file size. - - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. Moreover, File is - renamed File.1 and closed. - - - A new file is created to receive further log output. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - - - Implements file roll. - - the base name to rename - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - This is called by to rename the files. - - - - - Get the start time of the next window for the current rollpoint - - the current date - the type of roll point we are working with - the start time for the next roll point an interval after the currentDateTime date - - - Returns the date of the next roll point after the currentDateTime date passed to the method. - - - The basic strategy is to subtract the time parts that are less significant - than the rollpoint from the current time. This should roll the time back to - the start of the time window for the current rollpoint. Then we add 1 window - worth of time and get the start time of the next window for the rollpoint. - - - - - Send an e-mail when a specific logging event occurs, typically on errors - or fatal errors. - - - - The number of logging events delivered in this e-mail depend on - the value of option. The - keeps only the last - logging events in its - cyclic buffer. This keeps memory requirements at a reasonable level while - still delivering useful application context. - - - Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. - For these features to be enabled you need to ensure that you are using a version of - the log4net assembly that is built against the MS .NET 1.1 framework and that you are - running the your application on the MS .NET 1.1 runtime. On all other platforms only sending - unauthenticated messages to a server listening on port 25 (the default) is supported. - - - Authentication is supported by setting the property to - either or . - If using authentication then the - and properties must also be set. - - - To set the SMTP server port use the property. The default port is 25. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Default constructor - - - - - Values for the property. - - - - SMTP authentication modes. - - - - - Basic authentication. - - - Requires a username and password to be supplied - - - - Integrated authentication - - - Uses the Windows credentials from the current thread or process to authenticate. - - - - No authentication - - - - Gets or sets a semicolon-delimited list of recipient e-mail addresses. - - - A semicolon-delimited list of e-mail addresses. - - - - A semicolon-delimited list of recipient e-mail addresses. - - - - - Gets or sets the e-mail address of the sender. - - - The e-mail address of the sender. - - - - The e-mail address of the sender. - - - - - Gets or sets the subject line of the e-mail message. - - - The subject line of the e-mail message. - - - - The subject line of the e-mail message. - - - - - Gets or sets the name of the SMTP relay mail server to use to send - the e-mail messages. - - - The name of the e-mail relay server. If SmtpServer is not set, the - name of the local SMTP server is used. - - - - The name of the e-mail relay server. If SmtpServer is not set, the - name of the local SMTP server is used. - - - - - Obsolete - - - Use the BufferingAppenderSkeleton Fix methods instead - - - - Obsolete property. - - - - - The mode to use to authentication with the SMTP server - - - Authentication is only available on the MS .NET 1.1 runtime. - - Valid Authentication mode values are: , - , and . - The default value is . When using - you must specify the - and to use to authenticate. - When using the Windows credentials for the current - thread, if impersonating, or the process will be used to authenticate. - - - - - The username to use to authenticate with the SMTP server - - - Authentication is only available on the MS .NET 1.1 runtime. - - A and must be specified when - is set to , - otherwise the username will be ignored. - - - - - The password to use to authenticate with the SMTP server - - - Authentication is only available on the MS .NET 1.1 runtime. - - A and must be specified when - is set to , - otherwise the password will be ignored. - - - - - The port on which the SMTP server is listening - - - Server Port is only available on the MS .NET 1.1 runtime. - - The port on which the SMTP server is listening. The default - port is 25. The Port can only be changed when running on - the MS .NET 1.1 runtime. - - - - - Gets or sets the priority of the e-mail message - - - One of the values. - - - - Sets the priority of the e-mails generated by this - appender. The default priority is . - - - If you are using this appender to report errors then - you may want to set the priority to . - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Sends the contents of the cyclic buffer as an e-mail message. - - The logging events to send. - - - Send the email message - - the body text to include in the mail - - - Send an email when a specific logging event occurs, typically on errors - or fatal errors. Rather than sending via smtp it writes a file into the - directory specified by . This allows services such - as the IIS SMTP agent to manage sending the messages. - - - - The configuration for this appender is identical to that of the SMTPAppender, - except that instead of specifying the SMTPAppender.SMTPHost you specify - . - - - The number of logging events delivered in this e-mail depend on - the value of option. The - keeps only the last - logging events in its - cyclic buffer. This keeps memory requirements at a reasonable level while - still delivering useful application context. - - - Niall Daley - Nicko Cadell - - - Default constructor - - - - Default constructor - - - - - The security context to use for privileged calls - - - - Gets or sets a semicolon-delimited list of recipient e-mail addresses. - - - A semicolon-delimited list of e-mail addresses. - - - - A semicolon-delimited list of e-mail addresses. - - - - - Gets or sets the e-mail address of the sender. - - - The e-mail address of the sender. - - - - The e-mail address of the sender. - - - - - Gets or sets the subject line of the e-mail message. - - - The subject line of the e-mail message. - - - - The subject line of the e-mail message. - - - - - Gets or sets the path to write the messages to. - - - - Gets or sets the path to write the messages to. This should be the same - as that used by the agent sending the messages. - - - - - Gets or sets the used to write to the pickup directory. - - - The used to write to the pickup directory. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Sends the contents of the cyclic buffer as an e-mail message. - - The logging events to send. - - - Sends the contents of the cyclic buffer as an e-mail message. - - - - - Activate the options on this appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - Appender that allows clients to connect via Telnet to receive log messages - - - - The TelnetAppender accepts socket connections and streams logging messages - back to the client. - The output is provided in a telnet-friendly way so that a log can be monitored - over a TCP/IP socket. - This allows simple remote monitoring of application logging. - - - The default is 23 (the telnet port). - - - Keith Long - Nicko Cadell - - - Default constructor - - - - Default constructor - - - - - Helper class to manage connected clients - - - - The SocketHandler class is used to accept connections from - clients. It is threaded so that clients can connect/disconnect - asynchronously. - - - - - Opens a new server port on - the local port to listen on for connections - - - Creates a socket handler on the specified local server port. - - - - - Class that represents a client connected to this handler - - - - Class that represents a client connected to this handler - - - - - Create this for the specified - the client's socket - - - Opens a stream writer on the socket. - - - - - Write a string to the client - - string to send - - - Write a string to the client - - - - - Cleanup the clients connection - - - - Close the socket connection. - - - - - Test if this handler has active connections - - - true if this handler has active connections - - - - This property will be true while this handler has - active connections, that is at least one connection that - the handler will attempt to send a message to. - - - - - Sends a string message to each of the connected clients - - the text to send - - - Sends a string message to each of the connected clients - - - - - Add a client to the internal clients list - - client to add - - - Remove a client from the internal clients list - - client to remove - - - Callback used to accept a connection on the server socket - - The result of the asynchronous operation - - - On connection adds to the list of connections - if there are two many open connections you will be disconnected - - - - - Close all network connections - - - - Make sure we close all network connections - - - - - Gets or sets the TCP port number on which this will listen for connections. - - - An integer value in the range to - indicating the TCP port number on which this will listen for connections. - - - - The default value is 23 (the telnet port). - - - The value specified is less than - or greater than . - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Overrides the parent method to close the socket handler - - - - Closes all the outstanding connections. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Create the socket handler and wait for connections - - - - - Writes the logging event to each connected client. - - The event to log. - - - Writes the logging event to each connected client. - - - - - Sends logging events to a . - - - - An Appender that writes to a . - - - This appender may be used stand alone if initialized with an appropriate - writer, however it is typically used as a base class for an appender that - can open a to write to. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Initializes a new instance of the class and - sets the output destination to a new initialized - with the specified . - - The layout to use with this appender. - The to output to. - - - Obsolete constructor. - - - - - Initializes a new instance of the class and sets - the output destination to the specified . - - The layout to use with this appender - The to output to - - The must have been previously opened. - - - - Obsolete constructor. - - - - - This is the where logging events - will be written to. - - - - Immediate flush means that the underlying - or output stream will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logging events are not actually persisted if and when the application - crashes. - - - The default value is true. - - - - - Gets or set whether the appender will flush at the end - of each append operation. - - - - The default behavior is to flush at the end of each - append operation. - - - If this option is set to false, then the underlying - stream can defer persisting the logging event to a later - time. - - - - Avoiding the flush operation at the end of each append results in - a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - Sets the where the log output will go. - - - - The specified must be open and writable. - - - The will be closed when the appender - instance is closed. - - - Note: Logging to an unopened will fail. - - - - - Gets or set the and the underlying - , if any, for this appender. - - - The for this appender. - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Gets or sets the where logging events - will be written to. - - - The where logging events are written. - - - - This is the where logging events - will be written to. - - - - - This method determines if there is a sense in attempting to append. - - - - This method checked if an output target has been set and if a - layout has been set. - - - - false if any of the preconditions fail. - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - This method is called by the - method. - - The array of events to log. - - - This method writes all the bulk logged events to the output writer - before flushing the stream. - - - - - Close this appender instance. The underlying stream or writer is also closed. - - - Closed appenders cannot be reused. - - - - Writes the footer and closes the underlying . - - - - Writes the footer and closes the underlying . - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - Clears internal references to the underlying - and other variables. - - - - Subclasses can override this method for an alternate closing behavior. - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - Called to allow a subclass to lazily initialize the writer - - - - This method is called when an event is logged and the or - have not been set. This allows a subclass to - attempt to initialize the writer multiple times. - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - trace system. - - - Events are written using the System.Diagnostics.Trace.Write(string,string) - method. The event's logger name is passed as the value for the category name to the Write method. - - - Compact Framework -
- The Compact Framework does not support the - class for any operation except Assert. When using the Compact Framework this - appender will write to the system rather than - the Trace system. This appender will therefore behave like the . -
-
- Douglas de la Torre - Nicko Cadell - Gert Driesen
- - - Initializes a new instance of the . - - - - Default constructor. - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - - - - - Sends logging events as connectionless UDP datagrams to a remote host or a - multicast group using an . - - - - UDP guarantees neither that messages arrive, nor that they arrive in the correct order. - - - To view the logging results, a custom application can be developed that listens for logging - events. - - - When decoding events send via this appender remember to use the same encoding - to decode the events as was used to send the events. See the - property to specify the encoding to use. - - - - This example shows how to log receive logging events that are sent - on IP address 244.0.0.1 and port 8080 to the console. The event is - encoded in the packet as a unicode string and it is decoded as such. - - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - UdpClient udpClient; - byte[] buffer; - string loggingEvent; - try - { - udpClient = new UdpClient(8080); - while(true) - { - buffer = udpClient.Receive(ref remoteEndPoint); - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); - Console.WriteLine(loggingEvent); - } - } - catch(Exception e) - { - Console.WriteLine(e.ToString()); - } - - Dim remoteEndPoint as IPEndPoint - Dim udpClient as UdpClient - Dim buffer as Byte() - Dim loggingEvent as String - Try - remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) - udpClient = new UdpClient(8080) - While True - buffer = udpClient.Receive(ByRef remoteEndPoint) - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) - Console.WriteLine(loggingEvent) - Wend - Catch e As Exception - Console.WriteLine(e.ToString()) - End Try - - An example configuration section to log information using this appender to the - IP 224.0.0.1 on port 8080: - - - - - - - - Gert Driesen - Nicko Cadell - - - Initializes a new instance of the class. - - - The default constructor initializes all fields to their default values. - - - - The IP address of the remote host or multicast group to which - the logging event will be sent. - - - - The TCP port number of the remote host or multicast group to - which the logging event will be sent. - - - - The cached remote endpoint to which the logging events will be sent. - - - - The TCP port number from which the will communicate. - - - - The instance that will be used for sending the - logging events. - - - - The encoding to use for the packet. - - - - Gets or sets the IP address of the remote host or multicast group to which - the underlying should sent the logging event. - - - The IP address of the remote host or multicast group to which the logging event - will be sent. - - - - Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to - 239.255.255.255). Multicast packets can pass across different networks through routers, so - it is possible to use multicasts in an Internet scenario as long as your network provider - supports multicasting. - - - Hosts that want to receive particular multicast messages must register their interest by joining - the multicast group. Multicast messages are not sent to networks where no host has joined - the multicast group. Class D IP addresses are used for multicast groups, to differentiate - them from normal host addresses, allowing nodes to easily detect if a message is of interest. - - - Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: - - - - - IP Address - Description - - - 224.0.0.1 - - - Sends a message to all system on the subnet. - - - - - 224.0.0.2 - - - Sends a message to all routers on the subnet. - - - - - 224.0.0.12 - - - The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. - - - - - - - A complete list of actually reserved multicast addresses and their owners in the ranges - defined by RFC 3171 can be found at the IANA web site. - - - The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative - addresses. These addresses can be reused with other local groups. Routers are typically - configured with filters to prevent multicast traffic in this range from flowing outside - of the local network. - - - - - Gets or sets the TCP port number of the remote host or multicast group to which - the underlying should sent the logging event. - - - An integer value in the range to - indicating the TCP port number of the remote host or multicast group to which the logging event - will be sent. - - - The underlying will send messages to this TCP port number - on the remote host or multicast group. - - The value specified is less than or greater than . - - - Gets or sets the TCP port number from which the underlying will communicate. - - - An integer value in the range to - indicating the TCP port number from which the underlying will communicate. - - - - The underlying will bind to this port for sending messages. - - - Setting the value to 0 (the default) will cause the udp client not to bind to - a local port. - - - The value specified is less than or greater than . - - - Gets or sets used to write the packets. - - - The used to write the packets. - - - - The used to write the packets. - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to send logging events - over a network. Classes deriving from can use this - property to get or set this . Use the underlying - returned from if you require access beyond that which - provides. - - - - Gets or sets the cached remote endpoint to which the logging events should be sent. - - - The cached remote endpoint to which the logging events will be sent. - - - The method will initialize the remote endpoint - with the values of the and - properties. - - - - This appender requires a to be set. - - - true - - - - This appender requires a to be set. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The appender will be ignored if no was specified or - an invalid remote or local TCP port number was specified. - - - The required property was not specified. - The TCP port number assigned to or is less than or greater than . - - - This method is called by the method. - - The event to log. - - - Sends the event using an UDP datagram. - - - Exceptions are passed to the . - - - - - Closes the UDP connection and releases all resources associated with - this instance. - - - - Disables the underlying and releases all managed - and unmanaged resources associated with the . - - - - - Initializes the underlying connection. - - - - The underlying is initialized and binds to the - port number from which you intend to communicate. - - - Exceptions are passed to the . - - - - - Assembly level attribute that specifies a domain to alias to this assembly's repository. - - - - AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - - - An assembly's logger repository is defined by its , - however this can be overridden by an assembly loaded before the target assembly. - - - An assembly can alias another assembly's domain to its repository by - specifying this attribute with the name of the target domain. - - - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required domains. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class with - the specified domain to alias to this assembly's repository. - - The domain to alias to this assemby's repository. - - - Obsolete. Use instead of . - - - - - Assembly level attribute that specifies a repository to alias to this assembly's repository. - - - - An assembly's logger repository is defined by its , - however this can be overridden by an assembly loaded before the target assembly. - - - An assembly can alias another assembly's repository to its repository by - specifying this attribute with the name of the target repository. - - - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required repositories. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class with - the specified repository to alias to this assembly's repository. - - The repository to alias to this assemby's repository. - - - Initializes a new instance of the class with - the specified repository to alias to this assembly's repository. - - - - - Gets or sets the repository to alias to this assemby's repository. - - - The repository to alias to this assemby's repository. - - - - The name of the repository to alias to this assemby's repository. - - - - - Use this class to quickly configure a . - - - - Allows very simple programmatic configuration of log4net. - - - Only one appender can be configured using this configurator. - The appender is set at the root of the hierarchy and all logging - events will be delivered to that appender. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Initializes the log4net system with a default configuration. - - - - Initializes the log4net logging system using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - Initializes the log4net system using the specified appender. - - The appender to use to log all logging events. - - - Initializes the log4net system using the specified appender. - - - - - Initializes the with a default configuration. - - The repository to configure. - - - Initializes the specified repository using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - Initializes the using the specified appender. - - The repository to configure. - The appender to use to log all logging events. - - - Initializes the using the specified appender. - - - - - Base class for all log4net configuration attributes. - - - This is an abstract class that must be extended by - specific configurators. This attribute allows the - configurator to be parameterized by an assembly level - attribute. - - Nicko Cadell - Gert Driesen - - - Constructor used by subclasses. - - the ordering priority for this configurator - - - The is used to order the configurator - attributes before they are invoked. Higher priority configurators are executed - before lower priority ones. - - - - - Configures the for the specified assembly. - - The assembly that this attribute was defined on. - The repository to configure. - - - Abstract method implemented by a subclass. When this method is called - the subclass should configure the . - - - - - Compare this instance to another ConfiguratorAttribute - - the object to compare to - see - - - Compares the priorities of the two instances. - Sorts by priority in descending order. Objects with the same priority are - randomly ordered. - - - - - Assembly level attribute that specifies the logging domain for the assembly. - - - - DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - Assemblies are mapped to logging domains. Each domain has its own - logging repository. This attribute specified on the assembly controls - the configuration of the domain. The property specifies the name - of the domain that this assembly is a part of. The - specifies the type of the repository objects to create for the domain. If - this attribute is not specified and a is not specified - then the assembly will be part of the default shared logging domain. - - - This attribute can only be specified on the assembly and may only be used - once per assembly. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - - - Initialize a new instance of the class - with the name of the domain. - - The name of the domain. - - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - Private constructor - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - The repository to configure. - - - Configures log4net using a log4net element - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The element to parse. - - - Configures the using the specified XML - element. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - ... - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - Configures log4net using the specified configuration file. - - A stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - ... - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - Assembly level attribute to configure the . - - - - AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - Nicko Cadell - Gert Driesen - - - Class to register for the log4net section of the configuration file - - - The log4net section of the configuration file needs to have a section - handler registered. This is the section handler used. It simply returns - the XML element that is the root of the section. - - - Example of registering the log4net section handler : - - - -
- - - log4net configuration XML goes here - - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Parses the configuration section. - - The configuration settings in a corresponding parent configuration section. - The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. - The for the log4net section. - The for the log4net section. - - - Returns the containing the configuration data, - - - - - Assembly level attribute that specifies a plugin to attach to - the repository. - - - - Specifies the type of a plugin to create and attach to the - assembly's repository. The plugin type must implement the - interface. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class - with the specified type. - - The type name of plugin to create. - - - Create the attribute with the plugin type specified. - - - Where possible use the constructor that takes a . - - - - - Initializes a new instance of the class - with the specified type. - - The type of plugin to create. - - - Create the attribute with the plugin type specified. - - - - - Gets or sets the type for the plugin. - - - The type for the plugin. - - - - The type for the plugin. - - - - - Gets or sets the type name for the plugin. - - - The type name for the plugin. - - - - The type name for the plugin. - - - Where possible use the property instead. - - - - - Creates the plugin object defined by this attribute. - - - - Creates the instance of the object as - specified by this attribute. - - - The plugin object. - - - Returns a representation of the properties of this object. - - - - Overrides base class method to - return a representation of the properties of this object. - - - A representation of the properties of this object - - - Assembly level attribute that specifies the logging repository for the assembly. - - - - Assemblies are mapped to logging repository. This attribute specified - on the assembly controls - the configuration of the repository. The property specifies the name - of the repository that this assembly is a part of. The - specifies the type of the object - to create for the assembly. If this attribute is not specified or a - is not specified then the assembly will be part of the default shared logging repository. - - - This attribute can only be specified on the assembly and may only be used - once per assembly. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - Initialize a new instance of the class - with the name of the repository. - - The name of the repository. - - - Initialize the attribute with the name for the assembly's repository. - - - - - Gets or sets the name of the logging repository. - - - The string name to use as the name of the repository associated with this - assembly. - - - - This value does not have to be unique. Several assemblies can share the - same repository. They will share the logging configuration of the repository. - - - - - Gets or sets the type of repository to create for this assembly. - - - The type of repository to create for this assembly. - - - - The type of the repository to create for the assembly. - The type must implement the - interface. - - - This will be the type of repository created when - the repository is created. If multiple assemblies reference the - same repository then the repository is only created once using the - of the first assembly to call into the - repository. - - - - - Assembly level attribute to configure the . - - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - Nicko Cadell - - - Construct provider attribute with type specified - - the type of the provider to use - - - The provider specified must subclass the - class. - - - - - Gets or sets the type of the provider to use. - - - the type of the provider to use. - - - - The provider specified must subclass the - class. - - - - - Configures the SecurityContextProvider - - The assembly that this attribute was defined on. - The repository to configure. - - - Creates a provider instance from the specified. - Sets this as the default security context provider . - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - Private constructor - - - - Class used to watch config files. - - - - Uses the to monitor - changes to a specified file. Because multiple change notifications - may be raised when the file is modified, a timer is used to - compress the notifications into a single event. The timer - waits for time before delivering - the event notification. If any further - change notifications arrive while the timer is waiting it - is reset and waits again for to - elapse. - - - - - Initializes a new instance of the class. - - The repository to configure. - The configuration file to watch. - - - Initializes a new instance of the class. - - - - - The default amount of time to wait after receiving notification - before reloading the config file. - - - - Holds the FileInfo used to configure the XmlConfigurator - - - - Holds the repository being configured. - - - - The timer used to compress the notification events. - - - - Watch a specified config file used to configure a repository - - The repository to configure. - The configuration file to watch. - - - Watch a specified config file used to configure a repository - - - - - Event handler used by . - - The firing the event. - The argument indicates the file that caused the event to be fired. - - - This handler reloads the configuration from the file when the event is fired. - - - - - Event handler used by . - - The firing the event. - The argument indicates the file that caused the event to be fired. - - - This handler reloads the configuration from the file when the event is fired. - - - - - Called by the timer when the configuration has been updated. - - null - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - To use this method to configure log4net you must specify - the section - handler for the log4net configuration section. See the - for an example. - - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - To use this method to configure log4net you must specify - the section - handler for the log4net configuration section. See the - for an example. - - - The repository to configure. - - - Configures log4net using a log4net element - - - - Loads the log4net configuration from the XML element - supplied as . - - - The element to parse. - - - Configures the using the specified XML - element. - - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The first element matching <configuration> will be read as the - configuration. If this file is also a .NET .config file then you must specify - a configuration section for the log4net element otherwise .NET will - complain. Set the type for the section handler to , for example: - - -
- - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - ... - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - Configures log4net using the specified configuration URI. - - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The must support the URI scheme specified. - - - - - Configures log4net using the specified configuration data stream. - - A stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The first element matching <configuration> will be read as the - configuration. If this file is also a .NET .config file then you must specify - a configuration section for the log4net element otherwise .NET will - complain. Set the type for the section handler to , for example: - - -
- - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - ... - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - Configures the using the specified configuration - URI. - - The repository to configure. - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The must support the URI scheme specified. - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - Configures the specified repository using a log4net element. - - The hierarchy to configure. - The element to parse. - - - Loads the log4net configuration from the XML element - supplied as . - - - This method is ultimately called by one of the Configure methods - to load the configuration from an . - - - - - Assembly level attribute to configure the . - - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - If neither of the or - properties are set the configuration is loaded from the application's .config file. - If set the property takes priority over the - property. The property - specifies a path to a file to load the config from. The path is relative to the - application's base directory; . - The property is used as a postfix to the assembly file name. - The config file must be located in the application's base directory; . - For example in a console application setting the to - config has the same effect as not specifying the or - properties. - - - The property can be set to cause the - to watch the configuration file for changes. - - - - Log4net will only look for assembly level configuration attributes once. - When using the log4net assembly level attributes to control the configuration - of log4net you must ensure that the first call to any of the - methods is made from the assembly with the configuration - attributes. - - - If you cannot guarantee the order in which log4net calls will be made from - different assemblies you must use programmatic configuration instead, i.e. - call the method directly. - - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Default constructor - - - - - Gets or sets the filename of the configuration file. - - - The filename of the configuration file. - - - - If specified, this is the name of the configuration file to use with - the . This file path is relative to the - application base directory (). - - - The takes priority over the . - - - - - Gets or sets the extension of the configuration file. - - - The extension of the configuration file. - - - - If specified this is the extension for the configuration file. - The path to the config file is built by using the application - base directory (), - the assembly file name and the config file extension. - - - If the is set to MyExt then - possible config file names would be: MyConsoleApp.exe.MyExt or - MyClassLibrary.dll.MyExt. - - - The takes priority over the . - - - - - Gets or sets a value indicating whether to watch the configuration file. - - - true if the configuration should be watched, false otherwise. - - - - If this flag is specified and set to true then the framework - will watch the configuration file and will reload the config each time - the file is modified. - - - The config file can only be watched if it is loaded from local disk. - In a No-Touch (Smart Client) deployment where the application is downloaded - from a web server the config file may not reside on the local disk - and therefore it may not be able to watch it. - - - Watching configuration is not supported on the SSCLI. - - - - - Configures the for the specified assembly. - - The assembly that this attribute was defined on. - The repository to configure. - - - Configure the repository using the . - The specified must extend the - class otherwise the will not be able to - configure it. - - - The does not extend . - - - Attempt to load configuration from the local file system - - The assembly that this attribute was defined on. - The repository to configure. - - - Configure the specified repository using a - The repository to configure. - the FileInfo pointing to the config file - - - Attempt to load configuration from a URI - - The assembly that this attribute was defined on. - The repository to configure. - - - The implementation of the interface suitable - for use with the compact framework - - - - This implementation is a simple - mapping between repository name and - object. - - - The .NET Compact Framework 1.0 does not support retrieving assembly - level attributes therefore unlike the DefaultRepositorySelector - this selector does not examine the calling assembly for attributes. - - - Nicko Cadell - - - Create a new repository selector - - the type of the repositories to create, must implement - - - Create an new compact repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - throw if is null - throw if does not implement - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - Get the for the specified assembly - - not used - The default - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - Get the named - the name of the repository to lookup - The named - - - Get the named . The default - repository is log4net-default-repository. Other repositories - must be created using the . - If the named repository does not exist an exception is thrown. - - - throw if is null - throw if the does not exist - - - Create a new repository for the assembly specified - - not used - the type of repository to create, must implement - the repository created - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - If the is null then the - default repository type specified to the constructor is used. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - Create a new repository for the repository specified - - the repository to associate with the - the type of repository to create, must implement . - If this param is null then the default repository type is used. - the repository created - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - If the named repository already exists an exception will be thrown. - - - If is null then the default - repository type specified to the constructor is used. - - - throw if is null - throw if the already exists - - - Test if a named repository exists - - the named repository to check - - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - Notify the registered listeners that the repository has been created - - The repository that has been created - - - Raises the LoggerRepositoryCreatedEvent - event. - - - - - The default implementation of the interface. - - - - Uses attributes defined on the calling assembly to determine how to - configure the hierarchy for the repository. - - - Nicko Cadell - Gert Driesen - - - Creates a new repository selector. - - The type of the repositories to create, must implement - - - Create an new repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - - is . - - does not implement . - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - Gets the for the specified assembly. - - The assembly use to lookup the . - - - The type of the created and the repository - to create can be overridden by specifying the - attribute on the . - - - The default values are to use the - implementation of the interface and to use the - as the name of the repository. - - - The created will be automatically configured using - any attributes defined on - the . - - - The for the assembly - - is . - - - Gets the for the specified repository. - - The repository to use to lookup the . - The for the specified repository. - - - Returns the named repository. If is null - a is thrown. If the repository - does not exist a is thrown. - - - Use to create a repository. - - - - is . - - does not exist. - - - Create a new repository for the assembly specified - - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The type of the created and - the repository to create can be overridden by specifying the - attribute on the - . The default values are to use the - implementation of the - interface and to use the - as the name of the repository. - - - The created will be automatically - configured using any - attributes defined on the . - - - If a repository for the already exists - that repository will be returned. An error will not be raised and that - repository may be of a different type to that specified in . - Also the attribute on the - assembly may be used to override the repository type specified in - . - - - - is . - - - Creates a new repository for the assembly specified. - - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The name to assign to the created repository - Set to true to read and apply the assembly attributes - The repository created. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The type of the created and - the repository to create can be overridden by specifying the - attribute on the - . The default values are to use the - implementation of the - interface and to use the - as the name of the repository. - - - The created will be automatically - configured using any - attributes defined on the . - - - If a repository for the already exists - that repository will be returned. An error will not be raised and that - repository may be of a different type to that specified in . - Also the attribute on the - assembly may be used to override the repository type specified in - . - - - - is . - - - Creates a new repository for the specified repository. - - The repository to associate with the . - The type of repository to create, must implement . - If this param is then the default repository type is used. - The new repository. - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - - is . - - already exists. - - - Test if a named repository exists - - the named repository to check - - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - Aliases a repository to an existing repository. - - The repository to alias. - The repository that the repository is aliased to. - - - The repository specified will be aliased to the repository when created. - The repository must not already exist. - - - When the repository is created it must utilize the same repository type as - the repository it is aliased to, otherwise the aliasing will fail. - - - - - is . - -or- - - is . - - - - Notifies the registered listeners that the repository has been created. - - The repository that has been created. - - - Raises the event. - - - - - Gets the repository name and repository type for the specified assembly. - - The assembly that has a . - in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. - in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. - - is . - - - Configures the repository using information from the assembly. - - The assembly containing - attributes which define the configuration for the repository. - The repository to configure. - - - is . - -or- - - is . - - - - Loads the attribute defined plugins on the assembly. - - The assembly that contains the attributes. - The repository to add the plugins to. - - - is . - -or- - - is . - - - - Loads the attribute defined aliases on the assembly. - - The assembly that contains the attributes. - The repository to alias to. - - - is . - -or- - - is . - - - - Provides data for the event. - - - - A - event is raised every time a is created. - - - - - Construct instance using specified - - the that has been created - - - Construct instance using specified - - - - - The created - - - - The that has been created - - - The that has been created - - - - The that has been created - - - - - Defines the default set of levels recognized by the system. - - - - Each has an associated . - - - Levels have a numeric that defines the relative - ordering between levels. Two Levels with the same - are deemed to be equivalent. - - - The levels that are recognized by log4net are set for each - and each repository can have different levels defined. The levels are stored - in the on the repository. Levels are - looked up by name from the . - - - When logging at level INFO the actual level used is not but - the value of LoggerRepository.LevelMap["INFO"]. The default value for this is - , but this can be changed by reconfiguring the level map. - - - Each level has a in addition to its . The - is the string that is written into the output log. By default - the display name is the same as the level name, but this can be used to alias levels - or to localize the log output. - - - Some of the predefined levels recognized by the system are: - - - - - . - - - - . - - - - . - - - - . - - - - . - - - - . - - - - . - - - - Nicko Cadell - Gert Driesen - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - The display name for this level. This may be localized or otherwise different from the name - - - Initializes a new instance of the class with - the specified level name and value. - - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - - - Initializes a new instance of the class with - the specified level name and value. - - - - - The level designates a higher level than all the rest. - - - - The level designates very severe error events. - System unusable, emergencies. - - - - The level designates very severe error events - that will presumably lead the application to abort. - - - - The level designates very severe error events. - Take immediate action, alerts. - - - - The level designates very severe error events. - Critical condition, critical. - - - - The level designates very severe error events. - - - - The level designates error events that might - still allow the application to continue running. - - - - The level designates potentially harmful - situations. - - - - The level designates informational messages - that highlight the progress of the application at the highest level. - - - - The level designates informational messages that - highlight the progress of the application at coarse-grained level. - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - The level designates the lowest level possible. - - - - Gets the name of this level. - - - The name of this level. - - - - Gets the name of this level. - - - - - Gets the value of this level. - - - The value of this level. - - - - Gets the value of this level. - - - - - Gets the display name of this level. - - - The display name of this level. - - - - Gets the display name of this level. - - - - - Returns the representation of the current - . - - - A representation of the current . - - - - Returns the level . - - - - - Compares levels. - - The object to compare against. - - true if the objects are equal. - - - Compares the levels of instances, and - defers to base class if the target object is not a - instance. - - - - - Returns a hash code - - A hash code for the current . - - - Returns a hash code suitable for use in hashing algorithms and data - structures like a hash table. - - - Returns the hash code of the level . - - - - - Compares this instance to a specified object and returns an - indication of their relative values. - - A instance or to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the - values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - This instance is less than . - - - Zero - This instance is equal to . - - - Greater than zero - - This instance is greater than . - -or- - - is . - - - - - - must be an instance of - or ; otherwise, an exception is thrown. - - - - is not a . - - - Compares two specified instances. - - The first to compare. - The second to compare. - - A 32-bit signed integer that indicates the relative order of the - two values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - - is less than . - - - Zero - - is equal to . - - - Greater than zero - - is greater than . - - - - - Compares two levels. - - - - - Returns a value indicating whether a specified - is greater than another specified . - - A - A - - true if is greater than - ; otherwise, false. - - - - Compares two levels. - - - - - Returns a value indicating whether a specified - is less than another specified . - - A - A - - true if is less than - ; otherwise, false. - - - - Compares two levels. - - - - - Returns a value indicating whether a specified - is greater than or equal to another specified . - - A - A - - true if is greater than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - Returns a value indicating whether a specified - is less than or equal to another specified . - - A - A - - true if is less than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - Returns a value indicating whether two specified - objects have the same value. - - A or . - A or . - - true if the value of is the same as the - value of ; otherwise, false. - - - - Compares two levels. - - - - - Returns a value indicating whether two specified - objects have different values. - - A or . - A or . - - true if the value of is different from - the value of ; otherwise, false. - - - - Compares two levels. - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - Initializes a new instance of the LevelCollection class - that is empty and has the default initial capacity. - - - - Initializes a new instance of the LevelCollection class - that has the specified initial capacity. - - - The number of elements that the new LevelCollection is initially capable of storing. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified LevelCollection. - - The LevelCollection whose elements are copied to the new collection. - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - Allow subclasses to avoid our default constructors - - - - - Supports simple iteration over a . - - - - Initializes a new instance of the Enumerator class. - - - - - Gets the current element in the collection. - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - Type visible only to our subclasses - Used to access protected constructor - - - - A value - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - - is less than zero - -or- - - is equal to or greater than . - - - - Gets the number of elements actually contained in the LevelCollection. - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the collection. - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - Gets or sets the number of elements the LevelCollection can contain. - - - - Creates a read-only wrapper for a LevelCollection instance. - - list to create a readonly wrapper arround - - A LevelCollection wrapper that is read-only. - - - - Copies the entire LevelCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - Copies the entire LevelCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - Adds a to the end of the LevelCollection. - - The to be added to the end of the LevelCollection. - The index at which the value has been added. - - - Removes all elements from the LevelCollection. - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - Determines whether a given is in the LevelCollection. - - The to check for. - - true if is found in the LevelCollection; otherwise, false. - - - Returns the zero-based index of the first occurrence of a - in the LevelCollection. - - The to locate in the LevelCollection. - - The zero-based index of the first occurrence of - in the entire LevelCollection, if found; otherwise, -1. - - - - Inserts an element into the LevelCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - is less than zero - -or- - - is equal to or greater than . - - - - Removes the first occurrence of a specific from the LevelCollection. - - The to remove from the LevelCollection. - - The specified was not found in the LevelCollection. - - - - Removes the element at the specified index of the LevelCollection. - - The zero-based index of the element to remove. - - - is less than zero - -or- - - is equal to or greater than . - - - - Returns an enumerator that can iterate through the LevelCollection. - - An for the entire LevelCollection. - - - Adds the elements of another LevelCollection to the current LevelCollection. - - The LevelCollection whose elements should be added to the end of the current LevelCollection. - The new of the LevelCollection. - - - Adds the elements of a array to the current LevelCollection. - - The array whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - Adds the elements of a collection to the current LevelCollection. - - The collection whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - Sets the capacity to the actual number of elements. - - - - - is less than zero - -or- - - is equal to or greater than . - - - - - is less than zero - -or- - - is equal to or greater than . - - - - An evaluator that triggers at a threshold level - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - Nicko Cadell - - - Create a new evaluator using the threshold. - - - - Create a new evaluator using the threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - Create a new evaluator using the specified threshold. - - the threshold to trigger at - - - Create a new evaluator using the specified threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - The threshold for triggering - - - - the threshold to trigger at - - - The that will cause this evaluator to trigger - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - Is this the triggering event? - - The event to check - This method returns true, if the event level - is equal or higher than the . - Otherwise it returns false - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - Mapping between string name and Level object - - - - Mapping between string name and object. - This mapping is held separately for each . - The level name is case insensitive. - - - Nicko Cadell - - - Construct the level map - - - - Construct the level map. - - - - - Mapping from level name to Level object. The - level name is case insensitive - - - - Lookup a by name - - The name of the Level to lookup - a Level from the map with the name specified - - - Returns the from the - map with the name specified. If the no level is - found then null is returned. - - - - - Return all possible levels as a list of Level objects. - - all possible levels as a list of Level objects - - - Return all possible levels as a list of Level objects. - - - - - Clear the internal maps of all levels - - - - Clear the internal maps of all levels - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - - - Create a new Level and add it to the map - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - the display name to give to the Level - - - Create a new Level and add it to the map - - - - - Add a Level to the map - - the Level to add - - - Add a Level to the map - - - - - Lookup a named level from the map - - the name of the level to lookup is taken from this level. - If the level is not set on the map then this level is added - the level in the map with the name specified - - - Lookup a named level from the map. The name of the level to lookup is taken - from the property of the - argument. - - - If no level with the specified name is found then the - argument is added to the level map - and returned. - - - - - The internal representation of caller location information. - - - - This class uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. - - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - Nicko Cadell - Gert Driesen - - - Constructor - - The declaring type of the method that is - the stack boundary into the logging system for this call. - - - Initializes a new instance of the - class based on the current thread. - - - - - Constructor - - The fully qualified class name. - The method name. - The file name. - The line number of the method within the file. - - - Initializes a new instance of the - class with the specified data. - - - - - When location information is not available the constant - NA is returned. Current value of this string - constant is ?. - - - - Gets the fully qualified class name of the caller making the logging - request. - - - The fully qualified class name of the caller making the logging - request. - - - - Gets the fully qualified class name of the caller making the logging - request. - - - - - Gets the file name of the caller. - - - The file name of the caller. - - - - Gets the file name of the caller. - - - - - Gets the line number of the caller. - - - The line number of the caller. - - - - Gets the line number of the caller. - - - - - Gets the method name of the caller. - - - The method name of the caller. - - - - Gets the method name of the caller. - - - - - Gets all available caller information - - - All available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - Gets all available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - Exception base type for log4net. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - Constructor - - - - Initializes a new instance of the class. - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class with - the specified message. - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - Serialization constructor - - 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 class - with serialized data. - - - - - Static manager that controls the creation of repositories - - - - Static manager that controls the creation of repositories - - - This class is used by the wrapper managers (e.g. ) - to provide access to the objects. - - - This manager also holds the that is used to - lookup and create repositories. The selector can be set either programmatically using - the property, or by setting the log4net.RepositorySelector - AppSetting in the applications config file to the fully qualified type name of the - selector to use. - - - Nicko Cadell - Gert Driesen - - - Hook the shutdown event - - - - On the full .NET runtime, the static constructor hooks up the - AppDomain.ProcessExit and AppDomain.DomainUnload> events. - These are used to shutdown the log4net system as the application exits. - - - - - Private constructor to prevent instances. Only static methods should be used. - - - - Private constructor to prevent instances. Only static methods should be used. - - - - - Initialize the default repository selector - - - - Gets or sets the repository selector used by the . - - - The repository selector used by the . - - - - The repository selector () is used by - the to create and select repositories - (). - - - The caller to supplies either a string name - or an assembly (if not supplied the assembly is inferred using - ). - - - This context is used by the selector to lookup a specific repository. - - - For the full .NET Framework, the default repository is DefaultRepositorySelector; - for the .NET Compact Framework CompactRepositorySelector is the default - repository. - - - - - Register for ProcessExit and DomainUnload events on the AppDomain - - - - This needs to be in a separate method because the events make - a LinkDemand for the ControlAppDomain SecurityPermission. Because - this is a LinkDemand it is demanded at JIT time. Therefore we cannot - catch the exception in the method itself, we have to catch it in the - caller. - - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - Returns the default instance. - - - - - Returns the named logger if it exists. - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified repository. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - Returns the named logger if it exists. - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified assembly's repository. - - - - If the named logger exists (in the specified assembly's repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - Retrieves or creates a named logger. - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - Retrieves or creates a named logger. - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - Shorthand for . - - The repository to lookup in. - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - Shorthand for . - - the assembly to use to lookup the repository - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Shuts down the repository for the repository specified. - - The repository to shutdown. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Shuts down the repository for the repository specified. - - The assembly to use to lookup the repository. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Resets all values contained in this repository instance to their defaults. - - The repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - Resets all values contained in this repository instance to their defaults. - - The assembly to use to lookup the repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - Gets an array of all currently defined repositories. - - An array of all the known objects. - - - Gets an array of all currently defined repositories. - - - - - Internal method to get pertinent version info. - - A string of version info. - - - Called when the event fires - - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - - - Called when the event fires - - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - - - Implementation of the interface. - - - - This class should be used as the base for all wrapper implementations. - - - Nicko Cadell - Gert Driesen - - - Constructs a new wrapper for the specified logger. - - The logger to wrap. - - - Constructs a new wrapper for the specified logger. - - - - - The logger that this object is wrapping - - - - Gets the implementation behind this wrapper object. - - - The object that this object is implementing. - - - - The Logger object may not be the same object as this object - because of logger decorators. - - - This gets the actual underlying objects that is used to process - the log events. - - - - - Portable data structure used by - - - Portable data structure used by - - Nicko Cadell - - - The logger name. - - - - The logger name. - - - - - Level of logging event. - - - - Level of logging event. Level cannot be Serializable - because it is a flyweight. Due to its special serialization it - cannot be declared final either. - - - - - The application supplied message. - - - - The application supplied message of logging event. - - - - - The name of thread - - - - The name of thread in which this logging event was generated - - - - - The time the event was logged - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - Location information for the caller. - - - - Location information for the caller. - - - - - String representation of the user - - - - String representation of the user's windows name, - like DOMAIN\username - - - - - String representation of the identity. - - - - String representation of the current thread's principal identity. - - - - - The string representation of the exception - - - - The string representation of the exception - - - - - String representation of the AppDomain. - - - - String representation of the AppDomain. - - - - - Additional event specific properties - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - - - The internal representation of logging events. - - - - When an affirmative decision is made to log then a - instance is created. This instance - is passed around to the different log4net components. - - - This class is of concern to those wishing to extend log4net. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino - - - Initializes a new instance of the class - from the supplied parameters. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - The name of the logger of this event. - The level of this event. - The message of this event. - The exception for this event. - - - Except , and , - all fields of LoggingEvent are filled when actually needed. Call - to cache all data locally - to prevent inconsistencies. - - This method is called by the log4net framework - to create a logging event. - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - The fields in the struct that have already been fixed. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - The parameter should be used to specify which fields in the - struct have been preset. Fields not specified in the - will be captured from the environment if requested or fixed. - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - Initializes a new instance of the class - using specific data. - - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - Serialization constructor - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - The key into the Properties map for the host name value. - - - - The key into the Properties map for the thread identity value. - - - - The key into the Properties map for the user name value. - - - - The internal logging event data. - - - - The internal logging event data. - - - - The internal logging event data. - - - - The fully qualified Type of the calling - logger class in the stack frame (i.e. the declaring type of the method). - - - - The application supplied message of logging event. - - - - The exception that was thrown. - - - This is not serialized. The string representation - is serialized instead. - - - - The repository that generated the logging event - - - This is not serialized. - - - - The fix state for this event - - - These flags indicate which fields have been fixed. - Not serialized. - - - - Indicated that the internal cache is updateable (ie not fixed) - - - This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler - changes in the caching strategy. - - - - Gets the time when the current process started. - - - This is the time when this process started. - - - - The TimeStamp is stored in the local time zone for this computer. - - - Tries to get the start time for the current process. - Failing that it returns the time of the first call to - this property. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating and therefore - without the process start time being reset. - - - - - Gets the of the logging event. - - - The of the logging event. - - - - Gets the of the logging event. - - - - - Gets the time of the logging event. - - - The time of the logging event. - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - Gets the name of the logger that logged the event. - - - The name of the logger that logged the event. - - - - Gets the name of the logger that logged the event. - - - - - Gets the location information for this logging event. - - - The location information for this logging event. - - - - The collected information is cached for future use. - - - See the class for more information on - supported frameworks and the different behavior in Debug and - Release builds. - - - - - Gets the message object used to initialize this event. - - - The message object used to initialize this event. - - - - Gets the message object used to initialize this event. - Note that this event may not have a valid message object. - If the event is serialized the message object will not - be transferred. To get the text of the message the - property must be used - not this property. - - - If there is no defined message object for this event then - null will be returned. - - - - - Gets the exception object used to initialize this event. - - - The exception object used to initialize this event. - - - - Gets the exception object used to initialize this event. - Note that this event may not have a valid exception object. - If the event is serialized the exception object will not - be transferred. To get the text of the exception the - method must be used - not this property. - - - If there is no defined exception object for this event then - null will be returned. - - - - - The that this event was created in. - - - - The that this event was created in. - - - - - Gets the message, rendered through the . - - - The message rendered through the . - - - - The collected information is cached for future use. - - - - - Gets the name of the current thread. - - - The name of the current thread, or the thread ID when - the name is not available. - - - - The collected information is cached for future use. - - - - - Gets the name of the current user. - - - The name of the current user, or NOT AVAILABLE when the - underlying runtime has no support for retrieving the name of the - current user. - - - - Calls WindowsIdentity.GetCurrent().Name to get the name of - the current windows user. - - - To improve performance, we could cache the string representation of - the name, and reuse that as long as the identity stayed constant. - Once the identity changed, we would need to re-assign and re-render - the string. - - - However, the WindowsIdentity.GetCurrent() call seems to - return different objects every time, so the current implementation - doesn't do this type of caching. - - - Timing for these operations: - - - - Method - Results - - - - WindowsIdentity.GetCurrent() - - 10000 loops, 00:00:00.2031250 seconds - - - - WindowsIdentity.GetCurrent().Name - - 10000 loops, 00:00:08.0468750 seconds - - - - This means we could speed things up almost 40 times by caching the - value of the WindowsIdentity.GetCurrent().Name property, since - this takes (8.04-0.20) = 7.84375 seconds. - - - - - Gets the identity of the current thread principal. - - - The string name of the identity of the current thread principal. - - - - Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get - the name of the current thread principal. - - - - - Gets the AppDomain friendly name. - - - The AppDomain friendly name. - - - - Gets the AppDomain friendly name. - - - - - Additional event specific properties. - - - Additional event specific properties. - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - This property is for events that have been added directly to - this event. The aggregate properties (which include these - event properties) can be retrieved using - and . - - - Once the properties have been fixed this property - returns the combined cached properties. This ensures that updates to - this property are always reflected in the underlying storage. When - returning the combined properties there may be more keys in the - Dictionary than expected. - - - - - The fixed fields in this event - - - The set of fields that are fixed in this event - - - - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - Ensure that the repository is set. - - the value for the repository - - - Write the rendered message to a TextWriter - - the writer to write the message to - - - Unlike the property this method - does store the message data in the internal cache. Therefore - if called only once this method should be faster than the - property, however if the message is - to be accessed multiple times then the property will be more efficient. - - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - The data in this event must be fixed before it can be serialized. - - - The method must be called during the - method call if this event - is to be used outside that method. - - - - - Gets the portable data for this . - - The for this event. - - - A new can be constructed using a - instance. - - - Does a fix of the data - in the logging event before returning the event data. - - - - - Gets the portable data for this . - - The set of data to ensure is fixed in the LoggingEventData - The for this event. - - - A new can be constructed using a - instance. - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Obsolete. Use instead. - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Returns this event's exception's rendered using the - . - - - - - Fix instance fields that hold volatile data. - - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - incurred by calling but it - is essential to maintaining data consistency. - - - Calling is equivalent to - calling passing the parameter - false. - - - See for more - information. - - - - - Fixes instance fields that hold volatile data. - - Set to true to not fix data that takes a long time to fix. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - The param controls the data that - is fixed. Some of the data that can be fixed takes a long time to - generate, therefore if you do not require those settings to be fixed - they can be ignored by setting the param - to true. This setting will ignore the - and settings. - - - Set to false to ensure that all - settings are fixed. - - - - - Fix the fields specified by the parameter - - the fields to fix - - - Only fields specified in the will be fixed. - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - Lookup a composite property in this event - - the key for the property to lookup - the value for the property - - - This event has composite properties that combine together properties from - several different contexts in the following order: - - - this events properties - - This event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - Get all the composite properties in this event - - the containing all the properties - - - See for details of the composite properties - stored by the event. - - - This method returns a single containing all the - properties defined for this event. - - - - - Implementation of wrapper interface. - - - - This implementation of the interface - forwards to the held by the base class. - - - This logger has methods to allow the caller to log at the following - levels: - - - - DEBUG - - The and methods log messages - at the DEBUG level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - INFO - - The and methods log messages - at the INFO level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - WARN - - The and methods log messages - at the WARN level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - ERROR - - The and methods log messages - at the ERROR level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - FATAL - - The and methods log messages - at the FATAL level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - - The values for these levels and their semantic meanings can be changed by - configuring the for the repository. - - - Nicko Cadell - Gert Driesen - - - Construct a new wrapper for the specified logger. - - The logger to wrap. - - - Construct a new wrapper for the specified logger. - - - - - The fully qualified name of this declaring type not the type of any subclass. - - - - Checks if this logger is enabled for the DEBUG - level. - - - true if this logger is enabled for DEBUG events, - false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - - For some log Logger object, when you write: - - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed, then you should write: - - - if (log.IsDebugEnabled()) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in IsDebugEnabled and once in - the Debug. This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. - - - - - Checks if this logger is enabled for the INFO level. - - - true if this logger is enabled for INFO events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - Checks if this logger is enabled for the WARN level. - - - true if this logger is enabled for WARN events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - Checks if this logger is enabled for the ERROR level. - - - true if this logger is enabled for ERROR events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - Checks if this logger is enabled for the FATAL level. - - - true if this logger is enabled for FATAL events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - Virtual method called when the configuration of the repository changes - - the repository holding the levels - - - Virtual method called when the configuration of the repository changes - - - - - Logs a message object with the DEBUG level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - DEBUG level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - Logs a message object with the DEBUG level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the DEBUG level including - the stack trace of the passed - as a parameter. - - - See the form for more detailed information. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the DEBUG level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a message object with the INFO level. - - The message object to log. - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - INFO level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - Logs a message object with the INFO level. - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the INFO level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the INFO level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a message object with the WARN level. - - the message object to log - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - WARN level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - Logs a message object with the WARN level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the WARN level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the WARN level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a message object with the ERROR level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - ERROR level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - Logs a message object with the ERROR level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the ERROR level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the ERROR level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a message object with the FATAL level. - - The message object to log. - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - FATAL level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - Logs a message object with the FATAL level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the FATAL level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Logs a formatted message string with the FATAL level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - Event handler for the event - - the repository - Empty - - - A SecurityContext used by log4net when interacting with protected resources - - - - A SecurityContext used by log4net when interacting with protected resources - for example with operating system services. This can be used to impersonate - a principal that has been granted privileges on the system resources. - - - Nicko Cadell - - - Impersonate this SecurityContext - - State supplied by the caller - An instance that will - revoke the impersonation of this SecurityContext, or null - - - Impersonate this security context. Further calls on the current - thread should now be made in the security context provided - by this object. When the result - method is called the security - context of the thread should be reverted to the state it was in - before was called. - - - - - The providers default instances. - - - - A configured component that interacts with potentially protected system - resources uses a to provide the elevated - privileges required. If the object has - been not been explicitly provided to the component then the component - will request one from this . - - - By default the is - an instance of which returns only - objects. This is a reasonable default - where the privileges required are not know by the system. - - - This default behavior can be overridden by subclassing the - and overriding the method to return - the desired objects. The default provider - can be replaced by programmatically setting the value of the - property. - - - An alternative is to use the log4net.Config.SecurityContextProviderAttribute - This attribute can be applied to an assembly in the same way as the - log4net.Config.XmlConfiguratorAttribute". The attribute takes - the type to use as the as an argument. - - - Nicko Cadell - - - Protected default constructor to allow subclassing - - - - Protected default constructor to allow subclassing - - - - - The default provider - - - - Gets or sets the default SecurityContextProvider - - - The default SecurityContextProvider - - - - The default provider is used by configured components that - require a and have not had one - given to them. - - - By default this is an instance of - that returns objects. - - - The default provider can be set programmatically by setting - the value of this property to a sub class of - that has the desired behavior. - - - - - Create a SecurityContext for a consumer - - The consumer requesting the SecurityContext - An impersonation context - - - The default implementation is to return a . - - - Subclasses should override this method to provide their own - behavior. - - - - - Maps between logger objects and wrapper objects. - - - - This class maintains a mapping between objects and - objects. Use the method to - lookup the for the specified . - - - New wrapper instances are created by the - method. The default behavior is for this method to delegate construction - of the wrapper to the delegate supplied - to the constructor. This allows specialization of the behavior without - requiring subclassing of this type. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the - The handler to use to create the wrapper objects. - - - Initializes a new instance of the class with - the specified handler to create the wrapper objects. - - - - - Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings - - - - The handler to use to create the extension wrapper objects. - - - - Internal reference to the delegate used to register for repository shutdown events. - - - - Gets the map of logger repositories. - - - Map of logger repositories. - - - - Gets the hashtable that is keyed on . The - values are hashtables keyed on with the - value being the corresponding . - - - - - Gets the wrapper object for the specified logger. - - The wrapper object for the specified logger - - - If the logger is null then the corresponding wrapper is null. - - - Looks up the wrapper it it has previously been requested and - returns it. If the wrapper has never been requested before then - the virtual method is - called. - - - - - Creates the wrapper object for the specified logger. - - The logger to wrap in a wrapper. - The wrapper object for the logger. - - - This implementation uses the - passed to the constructor to create the wrapper. This method - can be overridden in a subclass. - - - - - Called when a monitored repository shutdown event is received. - - The that is shutting down - - - This method is called when a that this - is holding loggers for has signaled its shutdown - event . The default - behavior of this method is to release the references to the loggers - and their wrappers generated for this repository. - - - - - Event handler for repository shutdown event. - - The sender of the event. - The event args. - - - Formats a as "HH:mm:ss,fff". - - - - Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". - - - Nicko Cadell - Gert Driesen - - - String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. - - - - String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. - - - - String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. - - - - Last stored time with precision up to the second. - - - - Last stored time with precision up to the second, formatted - as a string. - - - - Last stored time with precision up to the second, formatted - as a string. - - - - Renders the date into a string. Format is "HH:mm:ss". - - The date to render into a string. - The string builder to write to. - - - Subclasses should override this method to render the date - into a string using a precision up to the second. This method - will be called at most once per second and the result will be - reused if it is needed again during the same second. - - - - - Renders the date into a string. Format is "HH:mm:ss,fff". - - The date to render into a string. - The writer to write to. - - - Uses the method to generate the - time string up to the seconds and then appends the current - milliseconds. The results from are - cached and is called at most once - per second. - - - Sub classes should override - rather than . - - - - - Formats a as "dd MMM yyyy HH:mm:ss,fff" - - - Formats a in the format - "dd MMM yyyy HH:mm:ss,fff" for example, - "06 Nov 1994 15:49:37,459". - - - Nicko Cadell - Gert Driesen - Angelika Schnagl - - - Default constructor. - - - - Initializes a new instance of the class. - - - - - The format info for the invariant culture. - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" - for example, "06 Nov 1994 15:49:37". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - Formats the as "yyyy-MM-dd HH:mm:ss,fff". - - - - Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Initializes a new instance of the class. - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - Formats the using the method. - - - - Formats the using the method. - - - Nicko Cadell - Gert Driesen - - - Constructor - - The format string. - - - Initializes a new instance of the class - with the specified format string. - - - The format string must be compatible with the options - that can be supplied to . - - - - - The format string used to format the . - - - - The format string must be compatible with the options - that can be supplied to . - - - - - Formats the date using . - - The date to convert to a string. - The writer to write to. - - - Uses the date format string supplied to the constructor to call - the method to format the date. - - - - - This filter drops all . - - - - You can add this filter to the end of a filter chain to - switch from the default "accept all unless instructed otherwise" - filtering behavior to a "deny all unless instructed otherwise" - behavior. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Always returns the integer constant - the LoggingEvent to filter - Always returns - - - Ignores the event being logged and just returns - . This can be used to change the default filter - chain behavior from to . This filter - should only be used as the last filter in the chain - as any further filters will be ignored! - - - - - Subclass this type to implement customized logging event filtering - - - - Users should extend this class to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - Points to the next filter in the filter chain. - - - - See for more information. - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - Initialize the filter with the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Typically filter's options become active immediately on set, - however this method must still be called. - - - - - Decide if the should be logged through an appender. - - The to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - This method is marked abstract and must be implemented - in a subclass. - - - - - This is a very simple filter based on matching. - - - - The filter admits two options and - . If there is an exact match between the value - of the option and the of the - , then the method returns in - case the option value is set - to true, if it is false then - is returned. If the does not match then - the result will be . - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - flag to indicate if the filter should on a match - - - - the to match against - - - - when matching - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - The that the filter will match - - - - The level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - Tests if the of the logging event matches that of the filter - - the event to filter - see remarks - - - If the of the event matches the level of the - filter then the result of the function depends on the - value of . If it is true then - the function will return , it it is false then it - will return . If the does not match then - the result will be . - - - - - This is a simple filter based on matching. - - - - The filter admits three options and - that determine the range of priorities that are matched, and - . If there is a match between the range - of priorities and the of the , then the - method returns in case the - option value is set to true, if it is false - then is returned. If there is no match, is returned. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Flag to indicate the behavior when matching a - - - the minimum value to match - - - - the maximum value to match - - - - when matching and - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - Set the minimum matched - - - The minimum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - Sets the maximum matched - - - The maximum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - Check if the event should be logged. - - the logging event to check - see remarks - - - If the of the logging event is outside the range - matched by this filter then - is returned. If the is matched then the value of - is checked. If it is true then - is returned, otherwise - is returned. - - - - - Simple filter to match a string in the event's logger name. - - - - The works very similar to the . It admits two - options and . If the - of the starts - with the value of the option, then the - method returns in - case the option value is set to true, - if it is false then is returned. - - - Daniel Cazzulino - - - Default constructor - - - - Flag to indicate the behavior when we have a match - - - - The logger name string to substring match against the event - - - - when matching - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - The that the filter will match - - - - This filter will attempt to match this value against logger name in - the following way. The match will be done against the beginning of the - logger name (using ). The match is - case sensitive. If a match is found then - the result depends on the value of . - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the equals the beginning of - the incoming () - then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - Simple filter to match a keyed string in the - - - Simple filter to match a keyed string in the - - As the MDC has been replaced with layered properties the - should be used instead. - - - Nicko Cadell - Gert Driesen - - - Simple filter to match a string in the - - - Simple filter to match a string in the - - As the MDC has been replaced with named stacks stored in the - properties collections the should - be used instead. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Sets the to "NDC". - - - - - Simple filter to match a string an event property - - - - Simple filter to match a string in the value for a - specific event property - - - Nicko Cadell - - - Default constructor - - - - The key to use to lookup the string from the event properties - - - - The key to lookup in the event properties and then match against. - - - - The key name to use to lookup in the properties map of the - . The match will be performed against - the value of this property if it exists. - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The event property for the is matched against - the . - If the occurs as a substring within - the property value then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - Simple filter to match a string in the rendered message - - - - Simple filter to match a string in the rendered message - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Flag to indicate the behavior when we have a match - - - - The string to substring match against the message - - - - A string regex to match - - - - A regex object to match (generated from m_stringRegexToMatch) - - - - when matching or - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - Sets the static string to match - - - - The string that will be substring matched against - the rendered message. If the message contains this - string then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - Sets the regular expression to match - - - - The regular expression pattern that will be matched against - the rendered message. If the message matches this - pattern then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - Initialize and precompile the Regex if required - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the occurs as a substring within - the message then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - Write the event appdomain name to the output - - - - Writes the to the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - Write the event appdomain name to the output - - - that will receive the formatted result. - the event being logged - - - Writes the to the output . - - - - - Date pattern converter, uses a to format - the date of a . - - - - Render the to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - The is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - Initialize the converter pattern based on the property. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Convert the pattern into the rendered message - - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone. - - - - - Write the exception text to the output - - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - Nicko Cadell - - - Default constructor - - - - Write the exception text to the output - - - that will receive the formatted result. - the event being logged - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - Writes the caller location file name to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - Write the caller location file name to the output - - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - Write the caller location info to the output - - - - Writes the to the output writer. - - - Nicko Cadell - - - Write the caller location info to the output - - - that will receive the formatted result. - the event being logged - - - Writes the to the output writer. - - - - - Writes the event identity to the output - - - - Writes the value of the to - the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - Writes the event identity to the output - - - that will receive the formatted result. - the event being logged - - - Writes the value of the to - the output . - - - - - Write the event level to the output - - - - Writes the display name of the event - to the writer. - - - Nicko Cadell - - - Write the event level to the output - - - that will receive the formatted result. - the event being logged - - - Writes the of the - to the . - - - - - Write the caller location line number to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - Write the caller location line number to the output - - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - Converter for logger name - - - - Outputs the of the event. - - - Nicko Cadell - - - Gets the fully qualified name of the logger - - the event being logged - The fully qualified logger name - - - Returns the of the . - - - - - Writes the event message to the output - - - - Uses the method - to write out the event message. - - - Nicko Cadell - - - Writes the event message to the output - - - that will receive the formatted result. - the event being logged - - - Uses the method - to write out the event message. - - - - - Write the method name to the output - - - - Writes the caller location to - the output. - - - Nicko Cadell - - - Write the method name to the output - - - that will receive the formatted result. - the event being logged - - - Writes the caller location to - the output. - - - - - Converter to output and truncate '.' separated strings - - - - This abstract class supports truncating a '.' separated string - to show a specified number of elements from the right hand side. - This is used to truncate class names that are fully qualified. - - - Subclasses should override the method to - return the fully qualified string. - - - Nicko Cadell - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Get the fully qualified string data - - the event being logged - the fully qualified name - - - Overridden by subclasses to get the fully qualified name before the - precision is applied to it. - - - Return the fully qualified '.' (dot/period) separated string. - - - - - Convert the pattern to the rendered message - - - that will receive the formatted result. - the event being logged - - Render the to the precision - specified by the property. - - - - Converter to include event NDC - - - - Outputs the value of the event property named NDC. - - - The should be used instead. - - - Nicko Cadell - - - Write the event NDC to the output - - - that will receive the formatted result. - the event being logged - - - As the thread context stacks are now stored in named event properties - this converter simply looks up the value of the NDC property. - - - The should be used instead. - - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - Nicko Cadell - - - Initializes a new instance of the class. - - - - Flag indicating if this converter handles exceptions - - - false if this converter handles exceptions - - - - Flag indicating if this converter handles the logging event exception - - - false if this converter handles the logging event exception - - - If this converter handles the exception object contained within - , then this property should be set to - false. Otherwise, if the layout ignores the exception - object, then the property should be set to true. - - - Set this value to override a this default setting. The default - value is true, this converter does not handle the exception. - - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - - that will receive the formatted result. - The on which the pattern converter should be executed. - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - Property pattern converter - - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - Nicko Cadell - - - Write the property value to the output - - - that will receive the formatted result. - the event being logged - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - Converter to output the relative time of the event - - - - Converter to output the time of the event relative to the start of the program. - - - Nicko Cadell - - - Write the relative time to the output - - - that will receive the formatted result. - the event being logged - - - Writes out the relative time of the event in milliseconds. - That is the number of milliseconds between the event - and the . - - - - - Helper method to get the time difference between two DateTime objects - - start time (in the current local time zone) - end time (in the current local time zone) - the time difference in milliseconds - - - Converter to include event thread name - - - - Writes the to the output. - - - Nicko Cadell - - - Write the ThreadName to the output - - - that will receive the formatted result. - the event being logged - - - Writes the to the . - - - - - Pattern converter for the class name - - - - Outputs the of the event. - - - Nicko Cadell - - - Gets the fully qualified name of the class - - the event being logged - The fully qualified type name for the caller location - - - Returns the of the . - - - - - Converter to include event user name - - Douglas de la Torre - Nicko Cadell - - - Convert the pattern to the rendered message - - - that will receive the formatted result. - the event being logged - - - Write the TimeStamp to the output - - - - Date pattern converter, uses a to format - the date of a . - - - Uses a to format the - in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - Write the TimeStamp to the output - - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone, this is converted - to Universal time before it is rendered. - - - - - - A Layout that renders only the Exception text from the logging event - - - - A Layout that renders only the Exception text from the logging event. - - - This Layout should only be used with appenders that utilize multiple - layouts (e.g. ). - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Constructs a ExceptionLayout - - - - - Activate component options - - - - Part of the component activation - framework. - - - This method does nothing as options become effective immediately. - - - - - Gets the exception text from the logging event - - The TextWriter to write the formatted event to - the event being logged - - - Write the exception string to the . - The exception string is retrieved from . - - - - - Adapts any to a - - - Where an is required this adapter - allows a to be specified. - - - Nicko Cadell - Gert Driesen - - - Construct a new adapter - - the layout to adapt - - - Create the adapter for the specified . - - - - - The layout to adapt - - - - Format the logging event as an object. - - The event to format - returns the formatted event - - - Format the logging event as an object. - - - Uses the object supplied to - the constructor to perform the formatting. - - - - - Extend this abstract class to create your own log layout format. - - - - This is the base implementation of the - interface. Most layout objects should extend this class. - - - - - - Subclasses must implement the - method. - - - Subclasses should set the in their default - constructor. - - - - Nicko Cadell - Gert Driesen - - - Empty default constructor - - - - Empty default constructor - - - - - The header text - - - - See for more information. - - - - - The footer text - - - - See for more information. - - - - - Flag indicating if this layout handles exceptions - - - - false if this layout handles exceptions - - - - - The content type output by this layout. - - The content type is "text/plain" - - - The content type output by this layout. - - - This base class uses the value "text/plain". - To change this value a subclass must override this - property. - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - Flag indicating if this layout handles exceptions - - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - Set this value to override a this default setting. The default - value is true, this layout does not handle the exception. - - - - - Activate component options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This method must be implemented by the subclass. - - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text. - - - - - A flexible layout configurable with pattern string. - - - - The goal of this class is to a - as a string. The results - depend on the conversion pattern. - - - The conversion pattern is closely related to the conversion - pattern of the printf function in C. A conversion pattern is - composed of literal text and format control expressions called - conversion specifiers. - - - You are free to insert any literal text within the conversion - pattern. - - - Each conversion specifier starts with a percent sign (%) and is - followed by optional format modifiers and a conversion - pattern name. The conversion pattern name specifies the type of - data, e.g. logger, level, date, thread name. The format - modifiers control such things as field width, padding, left and - right justification. The following is a simple example. - - - Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume - that the log4net environment was set to use a PatternLayout. Then the - statements - - - ILog log = LogManager.GetLogger(typeof(TestApp)); - log.Debug("Message 1"); - log.Warn("Message 2"); - - would yield the output - - DEBUG [main]: Message 1 - WARN [main]: Message 2 - - - Note that there is no explicit separator between text and - conversion specifiers. The pattern parser knows when it has reached - the end of a conversion specifier when it reads a conversion - character. In the example above the conversion specifier - %-5level means the level of the logging event should be left - justified to a width of five characters. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - a - Equivalent to appdomain - - - appdomain - - Used to output the friendly name of the AppDomain where the - logging event was generated. - - - - c - Equivalent to logger - - - C - Equivalent to type - - - class - Equivalent to type - - - d - Equivalent to date - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - exception - - - Used to output the exception passed in with the log message. - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - F - Equivalent to file - - - file - - - Used to output the file name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - WARNING Generating caller information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - l - Equivalent to location - - - L - Equivalent to line - - - location - - - Used to output location information of the caller which generated - the logging event. - - - The location information depends on the CLI implementation but - usually consists of the fully qualified name of the calling - method followed by the callers source the file name and line - number between parentheses. - - - The location information can be very useful. However, its - generation is extremely slow. Its use should be avoided - unless execution speed is not an issue. - - - See the note below on the availability of caller location information. - - - - - level - - - Used to output the level of the logging event. - - - - - line - - - Used to output the line number from where the logging request - was issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - logger - - - Used to output the logger of the logging event. The - logger conversion specifier can be optionally followed by - precision specifier, that is a decimal constant in - brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the logger name will be - printed. By default the logger name is printed in full. - - - For example, for the logger name "a.b.c" the pattern - %logger{2} will output "b.c". - - - - - m - Equivalent to message - - - M - Equivalent to method - - - message - - - Used to output the application supplied message associated with - the logging event. - - - - - mdc - - - The MDC (old name for the ThreadContext.Properties) is now part of the - combined event properties. This pattern is supported for compatibility - but is equivalent to property. - - - - - method - - - Used to output the method name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - n - Equivalent to newline - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - ndc - - - Used to output the NDC (nested diagnostic context) associated - with the thread that generated the logging event. - - - - - p - Equivalent to level - - - P - Equivalent to property - - - properties - Equivalent to property - - - property - - - Used to output the an event specific property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are added to events by loggers or appenders. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the event properties - - The event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - r - Equivalent to timestamp - - - t - Equivalent to thread - - - timestamp - - - Used to output the number of milliseconds elapsed since the start - of the application until the creation of the logging event. - - - - - thread - - - Used to output the name of the thread that generated the - logging event. Uses the thread number if no name is available. - - - - - type - - - Used to output the fully qualified type name of the caller - issuing the logging request. This conversion specifier - can be optionally followed by precision specifier, that - is a decimal constant in brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the class name will be - printed. By default the class name is output in fully qualified form. - - - For example, for the class name "log4net.Layout.PatternLayout", the - pattern %type{1} will output "PatternLayout". - - - WARNING Generating the caller class information is - slow. Thus, its use should be avoided unless execution speed is - not an issue. - - - See the note below on the availability of caller location information. - - - - - u - Equivalent to identity - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - WARNING Generating caller WindowsIdentity information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - w - Equivalent to username - - - x - Equivalent to ndc - - - X - Equivalent to mdc - - - % - - - The sequence %% outputs a single percent sign. - - - - - - The single letter patterns are deprecated in favor of the - longer more descriptive pattern names. - - - By default the relevant information is output as is. However, - with the aid of format modifiers it is possible to change the - minimum field width, the maximum field width and justification. - - - The optional format modifier is placed between the percent sign - and the conversion pattern name. - - - The first optional format modifier is the left justification - flag which is just the minus (-) character. Then comes the - optional minimum field width modifier. This is a decimal - constant that represents the minimum number of characters to - output. If the data item requires fewer characters, it is padded on - either the left or the right until the minimum width is - reached. The default is to pad on the left (right justify) but you - can specify right padding with the left justification flag. The - padding character is space. If the data item is larger than the - minimum field width, the field is expanded to accommodate the - data. The value is never truncated. - - - This behavior can be changed using the maximum field - width modifier which is designated by a period followed by a - decimal constant. If the data item is longer than the maximum - field, then the extra characters are removed from the - beginning of the data item and not from the end. For - example, it the maximum field width is eight and the data item is - ten characters long, then the first two characters of the data item - are dropped. This behavior deviates from the printf function in C - where truncation is done from the end. - - - Below are various format modifier examples for the logger - conversion specifier. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none - - Left pad with spaces if the logger name is less than 20 - characters long. - -
%-20loggertrue20none - - Right pad with spaces if the logger - name is less than 20 characters long. - -
%.30loggerNAnone30 - - Truncate from the beginning if the logger - name is longer than 30 characters. - -
- %20.30logger - false2030 - - Left pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
%-20.30loggertrue2030 - - Right pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
-
- - Note about caller location information. -
- The following patterns %type %file %line %method %location %class %C %F %L %l %M - all generate caller location information. - Location information uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. -
- - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - - Additional pattern converters may be registered with a specific - instance using the method. - -
- - This is a more detailed pattern. - - %timestamp [%thread] %level %logger %ndc - %message%newline - - - A similar pattern except that the relative time is - right padded if less than 6 digits, thread name is right padded if - less than 15 characters and truncated if longer and the logger - name is left padded if shorter than 30 characters and truncated if - longer. - - %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino
- - - Initialize the global registry - - - - Defines the builtin global rules. - - - - - Constructs a PatternLayout using the DefaultConversionPattern - - - - The default pattern just produces the application supplied message. - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - As per the contract the - method must be called after the properties on this object have been - configured. - - - - - Constructs a PatternLayout using the supplied conversion pattern - - the pattern to use - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - When using this constructor the method - need not be called. This may not be the case when using a subclass. - - - - - Wrapper class used to map converter names to converter types - - - - Pattern converter info class used during configuration to - pass to the - method. - - - - - default constructor - - - - Gets or sets the name of the conversion pattern - - - - The name of the pattern in the format string - - - - - Gets or sets the type of the converter - - - - The value specified must extend the - type. - - - - - Default pattern string for log output. - - - - Default pattern string for log output. - Currently set to the string "%message%newline" - which just prints the application supplied message. - - - - - A detailed conversion pattern - - - - A conversion pattern which includes Time, Thread, Logger, and Nested Context. - Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. - - - - - Internal map of converter identifiers to converter types. - - - - This static map is overridden by the m_converterRegistry instance map - - - - - the pattern - - - - the head of the pattern converter chain - - - - patterns defined on this PatternLayout only - - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - Create the pattern parser instance - - the pattern to parse - The that will format the event - - - Creates the used to parse the conversion string. Sets the - global and instance rules on the . - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Produces a formatted string as specified by the conversion pattern. - - the event being logged - The TextWriter to write the formatted event to - - - Parse the using the patter format - specified in the property. - - - - - Add a converter to this PatternLayout - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - Add a converter to this PatternLayout - - the name of the conversion pattern for this converter - the type of the converter - - - Add a named pattern converter to this instance. This - converter will be used in the formatting of the event. - This method must be called before . - - - The specified must extend the - type. - - - - - Type converter for the interface - - - - Used to convert objects to the interface. - Supports converting from the interface to - the interface using the . - - - Nicko Cadell - Gert Driesen - - - Can the sourceType be converted to an - the source to be to be converted - - true if the source type can be converted to - - - Test if the can be converted to a - . Only is supported - as the . - - - - - Convert the value to a object - - the value to convert - the object - - - Convert the object to a - object. If the object - is a then the - is used to adapt between the two interfaces, otherwise an - exception is thrown. - - - - - Extract the value of a property from the - - - Extract the value of a property from the - - Nicko Cadell - - - Constructs a RawPropertyLayout - - - - The name of the value to lookup in the LoggingEvent Properties collection. - - - Value to lookup in the LoggingEvent Properties collection - - - - String name of the property to lookup in the . - - - - - Lookup the property for - The event to format - returns property value - - - Looks up and returns the object value of the property - named . If there is no property defined - with than name then null will be returned. - - - - - Extract the date from the - - - Extract the date from the - - Nicko Cadell - Gert Driesen - - - Constructs a RawTimeStampLayout - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in local time. To format the time stamp - in universal time use . - - - - - Extract the date from the - - - Extract the date from the - - Nicko Cadell - Gert Driesen - - - Constructs a RawUtcTimeStampLayout - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in universal time. To format the time stamp - in local time use . - - - - - A very simple layout - - - - SimpleLayout consists of the level of the log statement, - followed by " - " and then the log message itself. For example, - - DEBUG - Hello world - - - Nicko Cadell - Gert Driesen - - - Constructs a SimpleLayout - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Produces a simple formatted output. - - the event being logged - The TextWriter to write the formatted event to - - - Formats the event as the level of the even, - followed by " - " and then the log message itself. The - output is terminated by a newline. - - - - - Layout that formats the log events as XML elements. - - - - The output of the consists of a series of - log4net:event elements. It does not output a complete well-formed XML - file. The output is designed to be included as an external entity - in a separate file to form a correct XML file. - - - For example, if abc is the name of the file where - the output goes, then a well-formed XML file would - be: - - - <?xml version="1.0" ?> - <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> - <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> - &data; - </log4net:events> - - - This approach enforces the independence of the - and the appender where it is embedded. - - - The version attribute helps components to correctly - interpret output generated by . The value of - this attribute should be "1.2" for release 1.2 and later. - - - Alternatively the Header and Footer properties can be - configured to output the correct XML header, open tag and close tag. - When setting the Header and Footer properties it is essential - that the underlying data store not be appendable otherwise the data - will become invalid XML. - - - Nicko Cadell - Gert Driesen - - - Constructs an XmlLayout - - - - Constructs an XmlLayout. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SmtpAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - The prefix to use for all generated element names - - - - The prefix to use for all element names - - - - The default prefix is log4net. Set this property - to change the prefix. If the prefix is set to an empty string - then no prefix will be written. - - - - - Set whether or not to base64 encode the message. - - - - By default the log message will be written as text to the xml - output. This can cause problems when the message contains binary - data. By setting this to true the contents of the message will be - base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the log message. - - - - - Set whether or not to base64 encode the property values. - - - - By default the properties will be written as text to the xml - output. This can cause problems when one or more properties contain - binary data. By setting this to true the values of the properties - will be base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the property values. - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Builds a cache of the element names - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Override the base class method - to write the to the . - - - - - Layout that formats the log events as XML elements. - - - - This is an abstract class that must be subclassed by an implementation - to conform to a specific schema. - - - Deriving classes must implement the method. - - - Nicko Cadell - Gert Driesen - - - Protected constructor to support subclasses - - - - Initializes a new instance of the class - with no location info. - - - - - Protected constructor to support subclasses - - - - The parameter determines whether - location information will be output by the layout. If - is set to true, then the - file name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - Flag to indicate if location information should be included in - the XML events. - - - - Writer adapter that ignores Close - - - - The string to replace invalid chars with - - - - Gets a value indicating whether to include location information in - the XML events. - - - true if location information should be included in the XML - events; otherwise, false. - - - - If is set to true, then the file - name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - The string to replace characters that can not be expressed in XML with. - - - Not all characters may be expressed in XML. This property contains the - string to replace those that can not with. This defaults to a ?. Set it - to the empty string to simply remove offending characters. For more - details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets - Character replacement will occur in the log message, the property names - and the property values. - - - - - Gets the content type output by this layout. - - - As this is the XML layout, the value is always "text/xml". - - - - As this is the XML layout, the value is always "text/xml". - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Produces a formatted string. - - The event being logged. - The TextWriter to write the formatted event to - - - Format the and write it to the . - - - This method creates an that writes to the - . The is passed - to the method. Subclasses should override the - method rather than this method. - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Subclasses should override this method to format - the as XML. - - - - - Layout that formats the log events as XML elements compatible with the log4j schema - - - - Formats the log events according to the http://logging.apache.org/log4j schema. - - - Nicko Cadell - - - Constructs an XMLLayoutSchemaLog4j - - - - Constructs an XMLLayoutSchemaLog4j. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - The 1st of January 1970 in UTC - - - - The version of the log4j schema to use. - - - - Only version 1.2 of the log4j schema is supported. - - - - - Actually do the writing of the xml - - the writer to use - the event to write - - - Generate XML that is compatible with the log4j schema. - - - - - The default object Renderer. - - - - The default renderer supports rendering objects and collections to strings. - - - See the method for details of the output. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Default constructor - - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - The default renderer supports rendering objects to strings as follows: - - - - Value - Rendered String - - - - null - - - "(null)" - - - - - - - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - - , & - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: {a, b, c}. - - - All collection classes that implement its subclasses, - or generic equivalents all implement the interface. - - - - - - - - - - Rendered as the key, an equals sign ('='), and the value (using the appropriate - renderer). - - - For example: key=value. - - - - - other - - - Object.ToString() - - - - - - - - Render the array argument into a string - - The map used to lookup renderers - the array to render - The writer to render to - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - Render the enumerator argument into a string - - The map used to lookup renderers - the enumerator to render - The writer to render to - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - {a, b, c}. - - - - - Render the DictionaryEntry argument into a string - - The map used to lookup renderers - the DictionaryEntry to render - The writer to render to - - - Render the key, an equals sign ('='), and the value (using the appropriate - renderer). For example: key=value. - - - - - Map class objects to an . - - - - Maintains a mapping between types that require special - rendering and the that - is used to render them. - - - The method is used to render an - object using the appropriate renderers defined in this map. - - - Nicko Cadell - Gert Driesen - - - Default Constructor - - - - Default constructor. - - - - - Get the default renderer instance - - the default renderer - - - Get the default renderer - - - - - Render using the appropriate renderer. - - the object to render to a string - the object rendered as a string - - - This is a convenience method used to render an object to a string. - The alternative method - should be used when streaming output to a . - - - - - Render using the appropriate renderer. - - the object to render to a string - The writer to render to - - - Find the appropriate renderer for the type of the - parameter. This is accomplished by calling the - method. Once a renderer is found, it is - applied on the object and the result is returned - as a . - - - - - Gets the renderer for the specified object type - - the object to lookup the renderer for - the renderer for - - - Gets the renderer for the specified object type. - - - Syntactic sugar method that calls - with the type of the object parameter. - - - - - Gets the renderer for the specified type - - the type to lookup the renderer for - the renderer for the specified type - - - Returns the renderer for the specified type. - If no specific renderer has been defined the - will be returned. - - - - - Internal function to recursively search interfaces - - the type to lookup the renderer for - the renderer for the specified type - - - Clear the map of renderers - - - - Clear the custom renderers defined by using - . The - cannot be removed. - - - - - Register an for . - - the type that will be rendered by - the renderer for - - - Register an object renderer for a specific source type. - This renderer will be returned from a call to - specifying the same as an argument. - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - Initializes a new instance of the PluginCollection class - that is empty and has the default initial capacity. - - - - Initializes a new instance of the PluginCollection class - that has the specified initial capacity. - - - The number of elements that the new PluginCollection is initially capable of storing. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified PluginCollection. - - The PluginCollection whose elements are copied to the new collection. - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - Allow subclasses to avoid our default constructors - - - - - - Supports simple iteration over a . - - - - - Initializes a new instance of the Enumerator class. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - A value - - - - Gets or sets the at the specified index. - - - The at the specified index. - - The zero-based index of the element to get or set. - - - is less than zero. - -or- - - is equal to or greater than . - - - - Gets the number of elements actually contained in the PluginCollection. - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - Gets an object that can be used to synchronize access to the collection. - - - An object that can be used to synchronize access to the collection. - - - - Gets a value indicating whether the collection has a fixed size. - - - true if the collection has a fixed size; otherwise, false. The default is false. - - - Gets a value indicating whether the IList is read-only. - - - true if the collection is read-only; otherwise, false. The default is false. - - - Gets or sets the number of elements the PluginCollection can contain. - - - The number of elements the PluginCollection can contain. - - - - Creates a read-only wrapper for a PluginCollection instance. - - list to create a readonly wrapper arround - - A PluginCollection wrapper that is read-only. - - - - Copies the entire PluginCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - Copies the entire PluginCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - Adds a to the end of the PluginCollection. - - The to be added to the end of the PluginCollection. - The index at which the value has been added. - - - Removes all elements from the PluginCollection. - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - Determines whether a given is in the PluginCollection. - - The to check for. - - true if is found in the PluginCollection; otherwise, false. - - - Returns the zero-based index of the first occurrence of a - in the PluginCollection. - - The to locate in the PluginCollection. - - The zero-based index of the first occurrence of - in the entire PluginCollection, if found; otherwise, -1. - - - - Inserts an element into the PluginCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - - is less than zero - -or- - - is equal to or greater than . - - - - Removes the first occurrence of a specific from the PluginCollection. - - The to remove from the PluginCollection. - - The specified was not found in the PluginCollection. - - - - Removes the element at the specified index of the PluginCollection. - - The zero-based index of the element to remove. - - - is less than zero. - -or- - - is equal to or greater than . - - - - Returns an enumerator that can iterate through the PluginCollection. - - An for the entire PluginCollection. - - - Adds the elements of another PluginCollection to the current PluginCollection. - - The PluginCollection whose elements should be added to the end of the current PluginCollection. - The new of the PluginCollection. - - - Adds the elements of a array to the current PluginCollection. - - The array whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - Adds the elements of a collection to the current PluginCollection. - - The collection whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - Sets the capacity to the actual number of elements. - - - - - is less than zero. - -or- - - is equal to or greater than . - - - - - is less than zero. - -or- - - is equal to or greater than . - - - - Map of repository plugins. - - - - This class is a name keyed map of the plugins that are - attached to a repository. - - - Nicko Cadell - Gert Driesen - - - Constructor - - The repository that the plugins should be attached to. - - - Initialize a new instance of the class with a - repository that the plugins should be attached to. - - - - - Gets a by name. - - The name of the to lookup. - - The from the map with the name specified, or - null if no plugin is found. - - - - Lookup a plugin by name. If the plugin is not found null - will be returned. - - - - - Gets all possible plugins as a list of objects. - - All possible plugins as a list of objects. - - - Get a collection of all the plugins defined in this map. - - - - - Adds a to the map. - - The to add to the map. - - - The will be attached to the repository when added. - - - If there already exists a plugin with the same name - attached to the repository then the old plugin will - be and replaced with - the new plugin. - - - - - Removes a from the map. - - The to remove from the map. - - - Remove a specific plugin from this map. - - - - - Base implementation of - - - Default abstract implementation of the - interface. This base class can be used by implementors - of the interface. - - - Nicko Cadell - Gert Driesen - - - Constructor - - the name of the plugin - - Initializes a new Plugin with the specified name. - - - - The name of this plugin. - - - - The repository this plugin is attached to. - - - - Gets or sets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - The name of the plugin must not change one the - plugin has been attached to a repository. - - - - - The repository for this plugin - - - The that this plugin is attached to. - - - - Gets or sets the that this plugin is - attached to. - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - Plugin that listens for events from the - - - This plugin publishes an instance of - on a specified . This listens for logging events delivered from - a remote . - - - When an event is received it is relogged within the attached repository - as if it had been raised locally. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Initializes a new instance of the class. - - - The property must be set. - - - - - Construct with sink Uri. - - The name to publish the sink under in the remoting infrastructure. - See for more details. - - - Initializes a new instance of the class - with specified name. - - - - - Delivers objects to a remote sink. - - - - Internal class used to listen for logging events - and deliver them to the local repository. - - - - - Constructor - - The repository to log to. - - - Initializes a new instance of the for the - specified . - - - - - The underlying that events should - be logged to. - - - - Logs the events to the repository. - - The events to log. - - - The events passed are logged to the - - - - Obtains a lifetime service object to control the lifetime - policy for this instance. - - - null to indicate that this instance should live forever. - - - Obtains a lifetime service object to control the lifetime - policy for this instance. This object should live forever - therefore this implementation returns null. - - - - - Gets or sets the URI of this sink. - - - The URI of this sink. - - - - This is the name under which the object is marshaled. - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - Is called when the plugin is to shutdown. - - - - When the plugin is shutdown the remote logging - sink is disconnected. - - - - - Default implementation of - - - This default implementation of the - interface is used to create the default subclass - of the object. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Initializes a new instance of the class. - - - - - Default internal subclass of - - - This subclass has no additional behavior over the - class but does allow instances - to be created. - - - - - Construct a new Logger - - the name of the logger - - - Initializes a new instance of the class - with the specified name. - - - - - Create a new instance - - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - Provides data for the event. - - - - A event is raised every time a - is created. - - - - - Constructor - - The that has been created. - - - Initializes a new instance of the event argument - class,with the specified . - - - - - The created - - - - Gets the that has been created. - - - The that has been created. - - - - The that has been created. - - - - - Hierarchical organization of loggers - - - - The casual user should not have to deal with this class - directly. - - - This class is specialized in retrieving loggers by name and - also maintaining the logger hierarchy. Implements the - interface. - - - The structure of the logger hierarchy is maintained by the - method. The hierarchy is such that children - link to their parent but parents do not have any references to their - children. Moreover, loggers can be instantiated in any order, in - particular descendant before ancestor. - - - In case a descendant is created before a particular ancestor, - then it creates a provision node for the ancestor and adds itself - to the provision node. Other descendants of the same ancestor add - themselves to the previously created provision node. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Initializes a new instance of the class. - - - - - Construct with properties - - The properties to pass to this repository. - - - Initializes a new instance of the class. - - - - - Construct with a logger factory - - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - Construct with properties and a logger factory - - The properties to pass to this repository. - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - A class to hold the value, name and display name for a level - - - - A class to hold the value, name and display name for a level - - - - - Value of the level - - - - If the value is not set (defaults to -1) the value will be looked - up for the current level with the same name. - - - - - Name of the level - - - The name of the level - - - - The name of the level. - - - - - Display name for the level - - - The display name of the level - - - - The display name of the level. - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - A class to hold the key and data for a property set in the config file - - - - A class to hold the key and data for a property set in the config file - - - - - Property Key - - - Property Key - - - - Property Key. - - - - - Property Value - - - Property Value - - - - Property Value. - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - Event used to notify that a logger has been created. - - - - Event raised when a logger is created. - - - - - Has no appender warning been emitted - - - - Flag to indicate if we have already issued a warning - about not having an appender warning. - - - - - Get the root of this hierarchy - - - - Get the root of this hierarchy. - - - - - Gets or sets the default instance. - - The default - - - The logger factory is used to create logger instances. - - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - Test if a logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the hierarchy. If so return - its reference, otherwise returns null. - - - - - Returns all the currently defined loggers in the hierarchy as an Array - - All the defined loggers - - - Returns all the currently defined loggers in the hierarchy as an Array. - The root logger is not included in the returned - enumeration. - - - - - Return a new logger instance named as the first parameter using - the default factory. - - - - Return a new logger instance named as the first parameter using - the default factory. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - The name of the logger to retrieve - The logger object with the name specified - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The Shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Reset all values contained in this hierarchy instance to their default. - - - - Reset all values contained in this hierarchy instance to their - default. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - Log the logEvent through this hierarchy. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - Returns all the Appenders that are currently configured - - An array containing all the currently configured appenders - - - Returns all the instances that are currently configured. - All the loggers are searched for appenders. The appenders may also be containers - for appenders and these are also searched for additional loggers. - - - The list returned is unordered but does not contain duplicates. - - - - - Collect the appenders from an . - The appender may also be a container. - - - - - - Collect the appenders from an container - - - - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - Test if this hierarchy is disabled for the specified . - - The level to check against. - - true if the repository is disabled for the level argument, false otherwise. - - - - If this hierarchy has not been configured then this method will - always return true. - - - This method will return true if this repository is - disabled for level object passed as parameter and - false otherwise. - - - See also the property. - - - - - Clear all logger definitions from the internal hashtable - - - - This call will clear all logger definitions from the internal - hashtable. Invoking this method will irrevocably mess up the - logger hierarchy. - - - You should really know what you are doing before - invoking this method. - - - - - Return a new logger instance named as the first parameter using - . - - The name of the logger to retrieve - The factory that will make the new logger instance - The logger object with the name specified - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated by the - parameter and linked with its existing - ancestors as well as children. - - - - - Sends a logger creation event to all registered listeners - - The newly created logger - - Raises the logger creation event. - - - - Updates all the parents of the specified logger - - The logger to update the parents for - - - This method loops through all the potential parents of - . There 3 possible cases: - - - - No entry for the potential parent of exists - - We create a ProvisionNode for this potential - parent and insert in that provision node. - - - - The entry is of type Logger for the potential parent. - - The entry is 's nearest existing parent. We - update 's parent field with this entry. We also break from - he loop because updating our parent's parent is our parent's - responsibility. - - - - The entry is of type ProvisionNode for this potential parent. - - We add to the list of children for this - potential parent. - - - - - - - Replace a with a in the hierarchy. - - - - - - We update the links for all the children that placed themselves - in the provision node 'pn'. The second argument 'log' is a - reference for the newly created Logger, parent of all the - children in 'pn'. - - - We loop on all the children 'c' in 'pn'. - - - If the child 'c' has been already linked to a child of - 'log' then there is no need to update 'c'. - - - Otherwise, we set log's parent field to c's parent and set - c's parent field to log. - - - - - Define or redefine a Level using the values in the argument - - the level values - - - Define or redefine a Level using the values in the argument - - - Supports setting levels via the configuration file. - - - - - Set a Property using the values in the argument - - the property value - - - Set a Property using the values in the argument. - - - Supports setting property values via the configuration file. - - - - - Implementation of used by - - - Internal class used to provide implementation of - interface. Applications should use to get - logger instances. - - - This is one of the central classes in the log4net implementation. One of the - distinctive features of log4net are hierarchical loggers and their - evaluation. The organizes the - instances into a rooted tree hierarchy. - - - The class is abstract. Only concrete subclasses of - can be created. The - is used to create instances of this type for the . - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - - - This constructor created a new instance and - sets its name. - - The name of the . - - - This constructor is protected and designed to be used by - a subclass that is not abstract. - - - Loggers are constructed by - objects. See for the default - logger creator. - - - - - The fully qualified type of the Logger class. - - - - The name of this logger. - - - - The assigned level of this logger. - - - - The level variable need not be - assigned a value in which case it is inherited - form the hierarchy. - - - - - The parent of this logger. - - - - The parent of this logger. - All loggers have at least one ancestor which is the root logger. - - - - - Loggers need to know what Hierarchy they are in. - - - - Loggers need to know what Hierarchy they are in. - The hierarchy that this logger is a member of is stored - here. - - - - - Helper implementation of the interface - - - - Flag indicating if child loggers inherit their parents appenders - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl - - - - Gets or sets the parent logger in the hierarchy. - - - The parent logger in the hierarchy. - - - - Part of the Composite pattern that makes the hierarchy. - The hierarchy is parent linked rather than child linked. - - - - - Gets or sets a value indicating if child loggers inherit their parent's appenders. - - - true if child loggers inherit their parent's appenders. - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - Gets the effective level for this logger. - - The nearest level in the logger hierarchy. - - - Starting from this logger, searches the logger hierarchy for a - non-null level and returns it. Otherwise, returns the level of the - root logger. - - The Logger class is designed so that this method executes as - quickly as possible. - - - - Gets or sets the where this - Logger instance is attached to. - - The hierarchy that this logger belongs to. - - - This logger must be attached to a single . - - - - - Gets or sets the assigned , if any, for this Logger. - - - The of this logger. - - - - The assigned can be null. - - - - - Get the appenders contained in this logger as an - . - - A collection of the appenders in this logger - - - Get the appenders contained in this logger as an - . If no appenders - can be found, then a is returned. - - - - - Gets the logger name. - - - The name of the logger. - - - - The name of this logger - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - Add to the list of appenders of this - Logger instance. - - An appender to add to this logger - - - Add to the list of appenders of this - Logger instance. - - - If is already in the list of - appenders, then it won't be added again. - - - - - Look for the appender named as name - The name of the appender to lookup - The appender with the name specified, or null. - - - Returns the named appender, or null if the appender is not found. - - - - - Remove all previously added appenders from this Logger instance. - - - - Remove all previously added appenders from this Logger instance. - - - This is useful when re-reading configuration information. - - - - - Remove the appender passed as parameter form the list of appenders. - - The appender to remove - The appender removed from the list - - - Remove the appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Remove the appender passed as parameter form the list of appenders. - - The name of the appender to remove - The appender removed from the list - - - Remove the named appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the and . - - - This method must not throw any exception to the caller. - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - This method must not throw any exception to the caller. - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - This method must not throw any exception to the caller. - - - - - Deliver the to the attached appenders. - - The event to log. - - - Call the appenders in the hierarchy starting at - this. If no appenders could be found, emit a - warning. - - - This method calls all the appenders inherited from the - hierarchy circumventing any evaluation of whether to log or not - to log the particular log request. - - - - - Closes all attached appenders implementing the interface. - - - - Used to ensure that the appenders are correctly shutdown. - - - - - This is the most generic printing method. This generic form is intended to be used by wrappers - - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the . - - - - - Creates a new logging event and logs the event without further checks. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generates a logging event and delivers it to the attached - appenders. - - - - - Creates a new logging event and logs the event without further checks. - - The event being logged. - - - Delivers the logging event to the attached appenders. - - - - - Used internally to accelerate hash table searches. - - - - Internal class used to improve performance of - string keyed hashtables. - - - The hashcode of the string is cached for reuse. - The string is stored as an interned value. - When comparing two objects for equality - the reference equality of the interned strings is compared. - - - Nicko Cadell - Gert Driesen - - - Construct key with string name - - - - Initializes a new instance of the class - with the specified name. - - - Stores the hashcode of the string and interns - the string key to optimize comparisons. - - - The Compact Framework 1.0 the - method does not work. On the Compact Framework - the string keys are not interned nor are they - compared by reference. - - - The name of the logger. - - - Returns a hash code for the current instance. - - A hash code for the current instance. - - - Returns the cached hashcode. - - - - - Determines whether two instances - are equal. - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - Compares the references of the interned strings. - - - - - Provision nodes are used where no logger instance has been specified - - - - instances are used in the - when there is no specified - for that node. - - - A provision node holds a list of child loggers on behalf of - a logger that does not exist. - - - Nicko Cadell - Gert Driesen - - - Create a new provision node with child node - - A child logger to add to this node. - - - Initializes a new instance of the class - with the specified child logger. - - - - - The sits at the root of the logger hierarchy tree. - - - - The is a regular except - that it provides several guarantees. - - - First, it cannot be assigned a null - level. Second, since the root logger cannot have a parent, the - property always returns the value of the - level field without walking the hierarchy. - - - Nicko Cadell - Gert Driesen - - - Construct a - The level to assign to the root logger. - - - Initializes a new instance of the class with - the specified logging level. - - - The root logger names itself as "root". However, the root - logger cannot be retrieved by name. - - - - - Gets the assigned level value without walking the logger hierarchy. - - The assigned level value without walking the logger hierarchy. - - - Because the root logger cannot have a parent and its level - must not be null this property just returns the - value of . - - - - - Gets or sets the assigned for the root logger. - - - The of the root logger. - - - - Setting the level of the root logger to a null reference - may have catastrophic results. We prevent this here. - - - - - Initializes the log4net environment using an XML DOM. - - - - Configures a using an XML DOM. - - - Nicko Cadell - Gert Driesen - - - Construct the configurator for a hierarchy - - The hierarchy to build. - - - Initializes a new instance of the class - with the specified . - - - - - key: appenderName, value: appender. - - - - The Hierarchy being configured. - - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - The root element to parse. - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - - - - Parse appenders by IDREF. - - The appender ref element. - The instance of the appender that the ref refers to. - - - Parse an XML element that represents an appender and return - the appender. - - - - - Parses an appender element. - - The appender element. - The appender instance or null when parsing failed. - - - Parse an XML element that represents an appender and return - the appender instance. - - - - - Parses a logger element. - - The logger element. - - - Parse an XML element that represents a logger. - - - - - Parses the root logger element. - - The root element. - - - Parse an XML element that represents the root logger. - - - - - Parses the children of a logger element. - - The category element. - The logger instance. - Flag to indicate if the logger is the root logger. - - - Parse the child elements of a <logger> element. - - - - - Parses an object renderer. - - The renderer element. - - - Parse an XML element that represents a renderer. - - - - - Parses a level element. - - The level element. - The logger object to set the level on. - Flag to indicate if the logger is the root logger. - - - Parse an XML element that represents a level. - - - - - Sets a parameter on an object. - - The parameter element. - The object to set the parameter on. - - The parameter name must correspond to a writable property - on the object. The value of the parameter is a string, - therefore this function will attempt to set a string - property first. If unable to set a string property it - will inspect the property and its argument type. It will - attempt to call a static method called Parse on the - type of the property. This method will take a single - string argument and return a value that can be used to - set the property. - - - - Test if an element has no attributes or child elements - - the element to inspect - - true if the element has any attributes or child elements, false otherwise - - - Test if a is constructible with Activator.CreateInstance. - - the type to inspect - - true if the type is creatable using a default constructor, false otherwise - - - Look for a method on the that matches the supplied - - the type that has the method - the name of the method - the method info found - - - The method must be a public instance method on the . - The method must be named or "Add" followed by . - The method must take a single parameter. - - - - - Converts a string value to a target type. - - The type of object to convert the string to. - The string value to use as the value of the object. - - - An object of type with value or - null when the conversion could not be performed. - - - - - Creates an object as specified in XML. - - The XML element that contains the definition of the object. - The object type to use if not explicitly specified. - The type that the returned object must be or must inherit from. - The object or null - - - Parse an XML element and create an object instance based on the configuration - data. - - - The type of the instance may be specified in the XML. If not - specified then the is used - as the type. However the type is specified it must support the - type. - - - - - Base implementation of - - - Default abstract implementation of the interface. - - - Skeleton implementation of the interface. - All types can extend this type. - - - Nicko Cadell - Gert Driesen - - - Default Constructor - - - - Initializes the repository with default (empty) properties. - - - - - Construct the repository using specific properties - - the properties to set for this repository - - - Initializes the repository with specified properties. - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - The name of the repository - - - The string name of the repository - - - - The name of this repository. The name is - used to store and lookup the repositories - stored by the . - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - Repository specific properties - - - Repository specific properties - - - These properties can be specified on a repository specific basis - - - - Test if logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - - - - Returns all the currently defined loggers in the repository - - All the defined loggers - - - Returns all the currently defined loggers in the repository as an Array. - - - - - Return a new logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Return a new logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - Shutdown the repository - - - - Shutdown the repository. Can be overridden in a subclass. - This base class implementation notifies the - listeners and all attached plugins of the shutdown event. - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - Log the logEvent through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - Adds an object renderer for a specific class. - - The type that will be rendered by the renderer supplied. - The object renderer used to render the object. - - - Adds an object renderer for a specific class. - - - - - Notify the registered listeners that the repository is shutting down - - Empty EventArgs - - - Notify any listeners that this repository is shutting down. - - - - - Notify the registered listeners that the repository has had its configuration reset - - Empty EventArgs - - - Notify any listeners that this repository's configuration has been reset. - - - - - Notify the registered listeners that the repository has had its configuration changed - - Empty EventArgs - - - Notify any listeners that this repository's configuration has changed. - - - - - Raise a configuration changed event on this repository - - EventArgs.Empty - - - Applications that programmatically change the configuration of the repository should - raise this event notification to notify listeners. - - - - - Write the name of the current AppDomain to the output - - - - Write the name of the current AppDomain to the output writer - - - Nicko Cadell - - - Write the name of the current AppDomain to the output - - the writer to write to - null, state is not set - - - Writes name of the current AppDomain to the output . - - - - - Write the current date to the output - - - - Date pattern converter, uses a to format - the current date and time to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - The date and time is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Write the current date to the output - - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date and time passed is in the local time zone. - - - - - Write an environment variable to the output - - - - Write an environment variable to the output writer. - The value of the determines - the name of the variable to output. - - - Nicko Cadell - - - Write an environment variable to the output - - the writer to write to - null, state is not set - - - Writes the environment variable to the output . - The name of the environment variable to output must be set - using the - property. - - - - - Write the current thread identity to the output - - - - Write the current thread identity to the output writer - - - Nicko Cadell - - - Write the current thread identity to the output - - the writer to write to - null, state is not set - - - Writes the current thread identity to the output . - - - - - Pattern converter for literal string instances in the pattern - - - - Writes the literal string value specified in the - property to - the output. - - - Nicko Cadell - - - Set the next converter in the chain - - The next pattern converter in the chain - The next pattern converter - - - Special case the building of the pattern converter chain - for instances. Two adjacent - literals in the pattern can be represented by a single combined - pattern converter. This implementation detects when a - is added to the chain - after this converter and combines its value with this converter's - literal value. - - - - - Write the literal to the output - - the writer to write to - null, not set - - - Override the formatting behavior to ignore the FormattingInfo - because we have a literal instead. - - - Writes the value of - to the output . - - - - - Convert this pattern into the rendered message - - - that will receive the formatted result. - null, not set - - - This method is not used. - - - - - Writes a newline to the output - - - - Writes the system dependent line terminator to the output. - This behavior can be overridden by setting the : - - - - Option Value - Output - - - DOS - DOS or Windows line terminator "\r\n" - - - UNIX - UNIX line terminator "\n" - - - - Nicko Cadell - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Write the current process ID to the output - - - - Write the current process ID to the output writer - - - Nicko Cadell - - - Write the current process ID to the output - - the writer to write to - null, state is not set - - - Write the current process ID to the output . - - - - - Property pattern converter - - - - This pattern converter reads the thread and global properties. - The thread properties take priority over global properties. - See for details of the - thread properties. See for - details of the global properties. - - - If the is specified then that will be used to - lookup a single property. If no is specified - then all properties will be dumped as a list of key value pairs. - - - Nicko Cadell - - - Write the property value to the output - - - that will receive the formatted result. - null, state is not set - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - A Pattern converter that generates a string of random characters - - - - The converter generates a string of random characters. By default - the string is length 4. This can be changed by setting the - to the string value of the length required. - - - The random characters in the string are limited to uppercase letters - and numbers only. - - - The random number generator used by this class is not cryptographically secure. - - - Nicko Cadell - - - Shared random number generator - - - - Length of random string to generate. Default length 4. - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Write a randoim string to the output - - the writer to write to - null, state is not set - - - Write a randoim string to the output . - - - - - Write the current threads username to the output - - - - Write the current threads username to the output writer - - - Nicko Cadell - - - Write the current threads username to the output - - the writer to write to - null, state is not set - - - Write the current threads username to the output . - - - - - Write the UTC date time to the output - - - - Date pattern converter, uses a to format - the current date and time in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - Write the current date and time to the output - - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date is in Universal time when it is rendered. - - - - - - Type converter for Boolean. - - - - Supports conversion from string to bool type. - - - - - - Nicko Cadell - Gert Driesen - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - Exception base type for conversion errors. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - Constructor - - - - Initializes a new instance of the class. - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class - with the specified message. - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - Serialization constructor - - 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 class - with serialized data. - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - An instance of the . - - - Creates a new instance of the class. - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - A nested exception to include. - An instance of the . - - - Creates a new instance of the class. - - - - - Register of type converters for specific types. - - - - Maintains a registry of type converters used to convert between - types. - - - Use the and - methods to register new converters. - The and methods - lookup appropriate converters to use. - - - - - Nicko Cadell - Gert Driesen - - - Static constructor. - - - - This constructor defines the intrinsic type converters. - - - - - Private constructor - - - Initializes a new instance of the class. - - - - Mapping from to type converter. - - - - Adds a converter for a specific type. - - The type being converted to. - The type converter to use to convert to the destination type. - - - Adds a converter instance for a specific type. - - - - - Adds a converter for a specific type. - - The type being converted to. - The type of the type converter to use to convert to the destination type. - - - Adds a converter for a specific type. - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted from. - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - Lookups the type converter to use as specified by the attributes on the - destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Creates the instance of the type converter. - - The type of the type converter. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - The type specified for the type converter must implement - the or interfaces - and must have a public default (no argument) constructor. - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - Gert Driesen - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an encoding - the encoding - - - Uses the method to - convert the argument to an . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - Nicko Cadell - - - Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an IPAddress - the IPAddress - - - Uses the method to convert the - argument to an . - If that fails then the string is resolved as a DNS hostname. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternLayout - the PatternLayout - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - Convert between string and - - - Supports conversion from string to type, - and from a type to a string. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - Can the target type be converted to the type supported by this object - - A that represents the type you want to convert to - true if the conversion is possible - - - Returns true if the is - assignable from a type. - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - . To check for this condition use the - method. - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternString - the PatternString - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a Type - the Type - - - Uses the method to convert the - argument to a . - Additional effort is made to locate partially specified types - by searching the loaded assemblies. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - Attribute used to associate a type converter - - - - Class and Interface level attribute that specifies a type converter - to use with the associated type. - - - To associate a type converter with a target type apply a - TypeConverterAttribute to the target type. Specify the - type of the type converter on the attribute. - - - Nicko Cadell - Gert Driesen - - - Default constructor - - - - Default constructor - - - - - Create a new type converter attribute for the specified type name - - The string type name of the type converter - - - The type specified must implement the - or the interfaces. - - - - - Create a new type converter attribute for the specified type - - The type of the type converter - - - The type specified must implement the - or the interfaces. - - - - - The string type name of the type converter - - - - The string type name of the type converter - - - The string type name of the type converter - - - - The type specified must implement the - or the interfaces. - - - - - A straightforward implementation of the interface. - - - - This is the default implementation of the - interface. Implementors of the interface - should aggregate an instance of this type. - - - Nicko Cadell - Gert Driesen - - - Constructor - - - - Initializes a new instance of the class. - - - - - List of appenders - - - - Array of appenders, used to cache the m_appenderList - - - - Gets all attached appenders. - - - A collection of attached appenders, or null if there - are no attached appenders. - - - - The read only collection of all currently attached appenders. - - - - - Append on on all attached appenders. - - The event being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - Append on on all attached appenders. - - The array of events being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - Calls the DoAppende method on the with - the objects supplied. - - The appender - The events - - - If the supports the - interface then the will be passed - through using that interface. Otherwise the - objects in the array will be passed one at a time. - - - - - Attaches an appender. - - The appender to add. - - - If the appender is already in the list it won't be added again. - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Lookup an attached appender by name. - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - This class aggregates several PropertiesDictionary collections together. - - - - Provides a dictionary style lookup over an ordered list of - collections. - - - Nicko Cadell - - - Constructor - - - - Initializes a new instance of the class. - - - - - Gets the value of a property - - - The value for the property with the specified key - - - - Looks up the value for the specified. - The collections are searched - in the order in which they were added to this collection. The value - returned is the value held by the first collection that contains - the specified key. - - - If none of the collections contain the specified key then - null is returned. - - - - - Add a Properties Dictionary to this composite collection - - the properties to add - - - Properties dictionaries added first take precedence over dictionaries added - later. - - - - - Flatten this composite collection into a single properties dictionary - - the flattened dictionary - - - Reduces the collection of ordered dictionaries to a single dictionary - containing the resultant values for the keys. - - - - - Base class for Context Properties implementations - - - - This class defines a basic property get set accessor - - - Nicko Cadell - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - Subclass of that maintains a count of - the number of bytes written. - - - - This writer counts the number of bytes written. - - - Nicko Cadell - Gert Driesen - - - Constructor - - The to actually write to. - The to report errors to. - - - Creates a new instance of the class - with the specified and . - - - - - Total number of bytes written. - - - - Gets or sets the total number of bytes written. - - - The total number of bytes written. - - - - Gets or sets the total number of bytes written. - - - - - Writes a character to the underlying writer and counts the number of bytes written. - - the char to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - Writes a buffer to the underlying writer and counts the number of bytes written. - - the buffer to write - the start index to write from - the number of characters to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - Writes a string to the output and counts the number of bytes written. - - The string data to write to the output. - - - Overrides implementation of . Counts - the number of bytes written. - - - - - A fixed size rolling buffer of logging events. - - - - An array backed fixed size leaky bucket. - - - Nicko Cadell - Gert Driesen - - - Constructor - - The maximum number of logging events in the buffer. - - - Initializes a new instance of the class with - the specified maximum number of buffered logging events. - - - The argument is not a positive integer. - - - Gets the th oldest event currently in the buffer. - - The th oldest event currently in the buffer. - - - If is outside the range 0 to the number of events - currently in the buffer, then null is returned. - - - - - Gets the maximum size of the buffer. - - The maximum size of the buffer. - - - Gets the maximum size of the buffer - - - - - Gets the number of logging events in the buffer. - - The number of logging events in the buffer. - - - This number is guaranteed to be in the range 0 to - (inclusive). - - - - - Appends a to the buffer. - - The event to append to the buffer. - The event discarded from the buffer, if the buffer is full, otherwise null. - - - Append an event to the buffer. If the buffer still contains free space then - null is returned. If the buffer is full then an event will be dropped - to make space for the new event, the event dropped is returned. - - - - - Get and remove the oldest event in the buffer. - - The oldest logging event in the buffer - - - Gets the oldest (first) logging event in the buffer and removes it - from the buffer. - - - - - Pops all the logging events from the buffer into an array. - - An array of all the logging events in the buffer. - - - Get all the events in the buffer and clear the buffer. - - - - - Clear the buffer - - - - Clear the buffer of all events. The events in the buffer are lost. - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - The singleton instance of the empty collection. - - - - Gets the singleton instance of the empty collection. - - The singleton instance of the empty collection. - - - Gets the singleton instance of the empty collection. - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - The singleton instance of the empty dictionary. - - - - Gets or sets the element with the specified key. - - The key of the element to get or set. - - null - - - - As the collection is empty no values can be looked up or stored. - If the index getter is called then null is returned. - A is thrown if the setter is called. - - - This dictionary is always empty and cannot be modified. - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - Gets the number of elements contained in the - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - Gets a value indicating whether the has a fixed size. - - - true - - - - As the collection is empty always returns true. - - - - - Gets a value indicating whether the is read-only. - - - true - - - - As the collection is empty always returns true. - - - - - Gets an containing the keys of the . - - An containing the keys of the . - - - As the collection is empty a is returned. - - - - - Gets an containing the values of the . - - An containing the values of the . - - - As the collection is empty a is returned. - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - Adds an element with the provided key and value to the - . - - The to use as the key of the element to add. - The to use as the value of the element to add. - - - As the collection is empty no new values can be added. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - Removes all elements from the . - - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - Determines whether the contains an element - with the specified key. - - The key to locate in the . - - false - - - - As the collection is empty the method always returns false. - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - Contain the information obtained when parsing formatting modifiers - in conversion modifiers. - - - - Holds the formatting information extracted from the format string by - the . This is used by the - objects when rendering the output. - - - Nicko Cadell - Gert Driesen - - - Defaut Constructor - - - - Initializes a new instance of the class. - - - - - Constructor - - - - Initializes a new instance of the class - with the specified parameters. - - - - - Gets or sets the minimum value. - - - The minimum value. - - - - Gets or sets the minimum value. - - - - - Gets or sets the maximum value. - - - The maximum value. - - - - Gets or sets the maximum value. - - - - - Gets or sets a flag indicating whether left align is enabled - or not. - - - A flag indicating whether left align is enabled or not. - - - - Gets or sets a flag indicating whether left align is enabled or not. - - - - - Implementation of Properties collection for the - - - This class implements a properties collection that is thread safe and supports both - storing properties and capturing a read only copy of the current propertied. - - - This class is optimized to the scenario where the properties are read frequently - and are modified infrequently. - - - Nicko Cadell - - - Constructor - - - - Initializes a new instance of the class. - - - - - The read only copy of the properties. - - - - This variable is declared volatile to prevent the compiler and JIT from - reordering reads and writes of this thread performed on different threads. - - - - - Lock object used to synchronize updates within this instance - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Reading the value for a key is faster than setting the value. - When the value is written a new read only copy of - the properties is created. - - - - - Remove a property from the global context - - the key for the entry to remove - - - Removing an entry from the global context properties is relatively expensive compared - with reading a value. - - - - - Clear the global context properties - - - - Get a readonly immutable copy of the properties - - the current global context properties - - - This implementation is fast because the GlobalContextProperties class - stores a readonly copy of the properties. - - - - - Manages a mapping from levels to - - - Manages an ordered mapping from instances - to subclasses. - - - Nicko Cadell - - - Default constructor - - - - Initialise a new instance of . - - - - - Add a to this mapping - - the entry to add - - - If a has previously been added - for the same then that entry will be - overwritten. - - - - - Lookup the mapping for the specified level - - the level to lookup - the for the level or null if no mapping found - - - Lookup the value for the specified level. Finds the nearest - mapping value for the level that is equal to or less than the - specified. - - - If no mapping could be found then null is returned. - - - - - Initialize options - - - - Caches the sorted list of in an array - - - - - An entry in the - - - This is an abstract base class for types that are stored in the - object. - - - Nicko Cadell - - - Default protected constructor - - - - Default protected constructor - - - - - The level that is the key for this mapping - - - The that is the key for this mapping - - - - Get or set the that is the key for this - mapping subclass. - - - - - Initialize any options defined on this entry - - - - Should be overridden by any classes that need to initialise based on their options - - - - - Implementation of Properties collection for the - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - Nicko Cadell - - - Constructor - - - - Initializes a new instance of the class. - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Get or set the property value for the specified. - - - - - Remove a property - - the key for the entry to remove - - - Remove the value for the specified from the context. - - - - - Clear all the context properties - - - - Clear all the context properties - - - - - Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doings so. - - - - - Outputs log statements from within the log4net assembly. - - - - Log4net components cannot make log4net logging calls. However, it is - sometimes useful for the user to learn about what log4net is - doing. - - - All log4net internal debug calls go to the standard output stream - whereas internal error messages are sent to the standard error output - stream. - - - Nicko Cadell - Gert Driesen - - - Static constructor that initializes logging by reading - settings from the application configuration file. - - - - The log4net.Internal.Debug application setting - controls internal debugging. This setting should be set - to true to enable debugging. - - - The log4net.Internal.Quiet application setting - suppresses all internal logging including error messages. - This setting should be set to true to enable message - suppression. - - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Default debug level - - - - In quietMode not even errors generate any output. - - - - Gets or sets a value indicating whether log4net internal logging - is enabled or disabled. - - - true if log4net internal logging is enabled, otherwise - false. - - - - When set to true, internal debug level logging will be - displayed. - - - This value can be set by setting the application setting - log4net.Internal.Debug in the application configuration - file. - - - The default value is false, i.e. debugging is - disabled. - - - - - The following example enables internal debugging using the - application configuration file : - - - - - - - - - - - - Gets or sets a value indicating whether log4net should generate no output - from internal logging, not even for errors. - - - true if log4net should generate no output at all from internal - logging, otherwise false. - - - - When set to true will cause internal logging at all levels to be - suppressed. This means that no warning or error reports will be logged. - This option overrides the setting and - disables all debug also. - - This value can be set by setting the application setting - log4net.Internal.Quiet in the application configuration file. - - - The default value is false, i.e. internal logging is not - disabled. - - - - The following example disables internal logging using the - application configuration file : - - - - - - - - - - Test if LogLog.Debug is enabled for output. - - - true if Debug is enabled - - - - Test if LogLog.Debug is enabled for output. - - - - - Test if LogLog.Warn is enabled for output. - - - true if Warn is enabled - - - - Test if LogLog.Warn is enabled for output. - - - - - Test if LogLog.Error is enabled for output. - - - true if Error is enabled - - - - Test if LogLog.Error is enabled for output. - - - - - Writes log4net internal debug messages to the - standard output stream. - - The message to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - Writes log4net internal debug messages to the - standard output stream. - - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - Writes log4net internal warning messages to the - standard error stream. - - The message to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - Writes log4net internal warning messages to the - standard error stream. - - The message to log. - An exception to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - Writes log4net internal error messages to the - standard error stream. - - The message to log. - - - All internal error messages are prepended with - the string "log4net:ERROR ". - - - - - Writes log4net internal error messages to the - standard error stream. - - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net:ERROR ". - - - - - Writes output to the standard output stream. - - The message to log. - - - Writes to both Console.Out and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - Writes output to the standard error stream. - - The message to log. - - - Writes to both Console.Error and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - The singleton instance of the . - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - Gets the current key from the enumerator. - - - Throws an exception because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - Gets the current value from the enumerator. - - The current value from the enumerator. - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - Gets the current entry from the enumerator. - - - Throws an because the - never has a current entry. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - Test if the enumerator can advance, if so advance. - - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - The singleton instance of the . - - - - Get the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - Test if the enumerator can advance, if so advance - - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - A SecurityContext used when a SecurityContext is not required - - - - The is a no-op implementation of the - base class. It is used where a - is required but one has not been provided. - - - Nicko Cadell - - - Private constructor - - - - Private constructor for singleton pattern. - - - - - Singleton instance of - - - Singleton instance of - - - - Impersonate this SecurityContext - - State supplied by the caller - - null - - - - No impersonation is done and null is always returned. - - - - - Implements log4net's default error handling policy which consists - of emitting a message for the first error in an appender and - ignoring all subsequent errors. - - - - The error message is printed on the standard error output stream. - - - This policy aims at protecting an otherwise working application - from being flooded with error messages when logging fails. - - - Nicko Cadell - Gert Driesen - - - Default Constructor - - - - Initializes a new instance of the class. - - - - - Constructor - - The prefix to use for each message. - - - Initializes a new instance of the class - with the specified prefix. - - - - - Flag to indicate if it is the first error - - - - String to prefix each message with - - - - Is error logging enabled - - - - Is error logging enabled. Logging is only enabled for the - first error delivered to the . - - - - - Log an Error - - The error message. - The exception. - The internal error code. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - Log an Error - - The error message. - The exception. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - Log an error - - The error message. - - - Print a the error message passed as parameter on the standard - error output stream. - - - - - A convenience class to convert property values to specific types. - - - - Utility functions for converting types and parsing values. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Converts a string to a value. - - String to convert. - The default value. - The value of . - - - If is "true", then true is returned. - If is "false", then false is returned. - Otherwise, is returned. - - - - - Parses a file size into a number. - - String to parse. - The default value. - The value of . - - - Parses a file size of the form: number[KB|MB|GB] into a - long value. It is scaled with the appropriate multiplier. - - - is returned when - cannot be converted to a value. - - - - - Converts a string to an object. - - The target type to convert to. - The string to convert to an object. - - The object converted from a string or null when the - conversion failed. - - - - Converts a string to an object. Uses the converter registry to try - to convert the string value into the specified target type. - - - - - Checks if there is an appropriate type conversion from the source type to the target type. - - The type to convert from. - The type to convert to. - - true if there is a conversion from the source type to the target type. - - Checks if there is an appropriate type conversion from the source type to the target type. - - - - Converts an object to the target type. - - The object to convert to the target type. - The type to convert to. - The converted object. - - - Converts an object to the target type. - - - - - Instantiates an object given a class name. - - The fully qualified class name of the object to instantiate. - The class to which the new object should belong. - The object to return in case of non-fulfillment. - - An instance of the or - if the object could not be instantiated. - - - - Checks that the is a subclass of - . If that test fails or the object could - not be instantiated, then is returned. - - - - - Performs variable substitution in string from the - values of keys found in . - - The string on which variable substitution is performed. - The dictionary to use to lookup variables. - The result of the substitutions. - - - The variable substitution delimiters are ${ and }. - - - For example, if props contains key=value, then the call - - - - string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); - - - - will set the variable s to "Value of key is value.". - - - If no value could be found for the specified key, then substitution - defaults to an empty string. - - - For example, if system properties contains no value for the key - "nonExistentKey", then the call - - - - string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); - - - - will set s to "Value of nonExistentKey is []". - - - An Exception is thrown if contains a start - delimiter "${" which is not balanced by a stop delimiter "}". - - - - - Converts the string representation of the name or numeric value of one or - more enumerated constants to an equivalent enumerated object. - - The type to convert to. - The enum string value. - If true, ignore case; otherwise, regard case. - An object of type whose value is represented by . - - - Abstract class that provides the formatting functionality that - derived classes need. - - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - - Nicko Cadell - Gert Driesen - - - Protected constructor - - - - Initializes a new instance of the class. - - - - - Initial buffer size - - - - Maximum buffer size before it is recycled - - - - The option string to the converter - - - - Get the next pattern converter in the chain - - - the next pattern converter in the chain - - - - Get the next pattern converter in the chain - - - - - Gets or sets the formatting info for this converter - - - The formatting info for this converter - - - - Gets or sets the formatting info for this converter - - - - - Gets or sets the option value for this converter - - - The option for this converter - - - - Gets or sets the option value for this converter - - - - - Evaluate this pattern converter and write the output to a writer. - - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the appropriate way. - - - - - Set the next pattern converter in the chains - - the pattern converter that should follow this converter in the chain - the next converter - - - The PatternConverter can merge with its neighbor during this method (or a sub class). - Therefore the return value may or may not be the value of the argument passed in. - - - - - Write the pattern converter to the writer with appropriate formatting - - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - This method calls to allow the subclass to perform - appropriate conversion of the pattern converter. If formatting options have - been specified via the then this method will - apply those formattings before writing the output. - - - - - Fast space padding method. - - - to which the spaces will be appended. - The number of spaces to be padded. - - - Fast space padding method. - - - - - Write an dictionary to a - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the to a writer in the form: - - - {key1=value1, key2=value2, key3=value3} - - - If the specified - is not null then it is used to render the key and value to text, otherwise - the object's ToString method is called. - - - - - Write an object to a - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the Object to a writer. If the specified - is not null then it is used to render the object to text, otherwise - the object's ToString method is called. - - - - - Most of the work of the class - is delegated to the PatternParser class. - - - - The PatternParser processes a pattern string and - returns a chain of objects. - - - Nicko Cadell - Gert Driesen - - - Constructor - - The pattern to parse. - - - Initializes a new instance of the class - with the specified pattern string. - - - - - Sort strings by length - - - - that orders strings by string length. - The longest strings are placed first - - - - - The first pattern converter in the chain - - - - the last pattern converter in the chain - - - - The pattern - - - - Internal map of converter identifiers to converter types - - - - This map overrides the static s_globalRulesRegistry map. - - - - - Get the converter registry used by this parser - - - The converter registry used by this parser - - - - Get the converter registry used by this parser - - - - - Parses the pattern into a chain of pattern converters. - - The head of a chain of pattern converters. - - - Parses the pattern into a chain of pattern converters. - - - - - Build the unified cache of converters from the static and instance maps - - the list of all the converter names - - - Build the unified cache of converters from the static and instance maps - - - - - Internal method to parse the specified pattern to find specified matches - - the pattern to parse - the converter names to match in the pattern - - - The matches param must be sorted such that longer strings come before shorter ones. - - - - - Process a parsed literal - - the literal text - - - Process a parsed converter pattern - - the name of the converter - the optional option for the converter - the formatting info for the converter - - - Resets the internal state of the parser and adds the specified pattern converter - to the chain. - - The pattern converter to add. - - - This class implements a patterned string. - - - - This string has embedded patterns that are resolved and expanded - when the string is formatted. - - - This class functions similarly to the - in that it accepts a pattern and renders it to a string. Unlike the - however the PatternString - does not render the properties of a specific but - of the process in general. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - appdomain - - - Used to output the friendly name of the current AppDomain. - - - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - env - - - Used to output the a specific environment variable. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %env{COMPUTERNAME} would include the value - of the COMPUTERNAME environment variable. - - - The env pattern is not supported on the .NET Compact Framework. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern name offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - processid - - - Used to output the system process ID for the current process. - - - - - property - - - Used to output a specific context property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are stored in logging contexts. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - random - - - Used to output a random string of characters. The string is made up of - uppercase letters and numbers. By default the string is 4 characters long. - The length of the string can be specified within braces directly following the - pattern specifier, e.g. %random{8} would output an 8 character string. - - - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - % - - - The sequence %% outputs a single percent sign. - - - - - - Additional pattern converters may be registered with a specific - instance using or - . - - - See the for details on the - format modifiers supported by the patterns. - - - Nicko Cadell - - - Initialize the global registry - - - - Default constructor - - - - Initialize a new instance of - - - - Constructs a PatternString - - The pattern to use with this PatternString - - - Initialize a new instance of with the pattern specified. - - - - - Wrapper class used to map converter names to converter types - - - - Wrapper class used to map converter names to converter types - - - - - default constructor - - - - Gets or sets the name of the conversion pattern - - - The name of the conversion pattern - - - - Gets or sets the name of the conversion pattern - - - - - Gets or sets the type of the converter - - - The type of the converter - - - - Gets or sets the type of the converter - - - - - Internal map of converter identifiers to converter types. - - - - the pattern - - - - the head of the pattern converter chain - - - - patterns defined on this PatternString only - - - - Gets or sets the pattern formatting string - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - Initialize object options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - Create the used to parse the pattern - - the pattern to parse - The - - - Returns PatternParser used to parse the conversion string. Subclasses - may override this to return a subclass of PatternParser which recognize - custom conversion pattern name. - - - - - Produces a formatted string as specified by the conversion pattern. - - The TextWriter to write the formatted event to - - - Format the pattern to the . - - - - - Format the pattern as a string - - the pattern formatted as a string - - - Format the pattern to a string. - - - - - Add a converter to this PatternString - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - Add a converter to this PatternString - - the name of the conversion pattern for this converter - the type of the converter - - - Add a converter to this PatternString - - - - - String keyed object map. - - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - Constructor - - - - Initializes a new instance of the class. - - - - - Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Because this class is sealed the serialization constructor is private. - - - - - See - - The value for the key specified. - - - - Get or set a value for the specified . - - - Thrown if the is not a string - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - See - - - See - - - See - - - See - - - See - - - See - - false - - - - This collection is modifiable. This property always - returns false. - - - - - See - - - See - - - - - See - the key - the value to store for the key - - - Store a value for the specified . - - - Thrown if the is not a string - - - See - the key to lookup in the collection - - true if the collection contains the specified key - - - Test if this collection contains a specified key. - - - - - See - the key to remove - - - Remove the entry with the specified key from this dictionary - - - - - See - an enumerator - - - Returns a over the contest of this collection. - - - - - Remove the entry with the specified key from this dictionary - - the key for the entry to remove - - - Remove the entry with the specified key from this dictionary - - - - - Remove all properties from the properties collection - - - - Remove all properties from the properties collection - - - - - A that ignores the message - - - - This writer is used in special cases where it is necessary - to protect a writer from being closed by a client. - - - Nicko Cadell - - - Constructor - - the writer to actually write to - - - Create a new ProtectCloseTextWriter using a writer - - - - - Attach this instance to a different underlying - the writer to attach to - - - Attach this instance to a different underlying - - - - Does not close the underlying output writer. - - - - Does not close the underlying output writer. - This method does nothing. - - - - - that does not leak exceptions - - - - does not throw exceptions when things go wrong. - Instead, it delegates error handling to its . - - - Nicko Cadell - Gert Driesen - - - Constructor - - the writer to actually write to - the error handler to report error to - - - Create a new QuietTextWriter using a writer and error handler - - - - - The error handler instance to pass all errors to - - - - Flag to indicate if this writer is closed - - - - Gets or sets the error handler that all errors are passed to. - - - The error handler that all errors are passed to. - - - - Gets or sets the error handler that all errors are passed to. - - - - - Gets a value indicating whether this writer is closed. - - - true if this writer is closed, otherwise false. - - - - Gets a value indicating whether this writer is closed. - - - - - Writes a character to the underlying writer - - the char to write - - - Writes a character to the underlying writer - - - - - Writes a buffer to the underlying writer - - the buffer to write - the start index to write from - the number of characters to write - - - Writes a buffer to the underlying writer - - - - - Writes a string to the output. - - The string data to write to the output. - - - Writes a string to the output. - - - - - Closes the underlying output writer. - - - - Closes the underlying output writer. - - - - - Defines a lock that supports single writers and multiple readers - - - - ReaderWriterLock is used to synchronize access to a resource. - At any given time, it allows either concurrent read access for - multiple threads, or write access for a single thread. In a - situation where a resource is changed infrequently, a - ReaderWriterLock provides better throughput than a simple - one-at-a-time lock, such as . - - - If a platform does not support a System.Threading.ReaderWriterLock - implementation then all readers and writers are serialized. Therefore - the caller must not rely on multiple simultaneous readers. - - - Nicko Cadell - - - Constructor - - - - Initializes a new instance of the class. - - - - - Acquires a reader lock - - - - blocks if a different thread has the writer - lock, or if at least one thread is waiting for the writer lock. - - - - - Decrements the lock count - - - - decrements the lock count. When the count - reaches zero, the lock is released. - - - - - Acquires the writer lock - - - - This method blocks if another thread has a reader lock or writer lock. - - - - - Decrements the lock count on the writer lock - - - - ReleaseWriterLock decrements the writer lock count. - When the count reaches zero, the writer lock is released. - - - - - String keyed object map that is read only. - - - - This collection is readonly and cannot be modified. - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - Constructor - - - - Initializes a new instance of the class. - - - - - Copy Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - Deserialization constructor - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - The Hashtable used to store the properties data - - - - See - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - See - - - See - - - See - - - See - - - See - - - See - - - The hashtable used to store the properties - - - The internal collection used to store the properties - - - - The hashtable used to store the properties - - - - - The number of properties in this collection - - - - See - - - See - - - - - See - - - - - See - - - - - See - - - - See - - - Gets the key names. - - An array of all the keys. - - - Gets the key names. - - - - - Test if the dictionary contains a specified key - - the key to look for - true if the dictionary contains the specified key - - - Test if the dictionary contains a specified key - - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - Serializes this object into the provided. - - - - - Remove all properties from the properties collection - - - - A that can be and reused - - - - A that can be and reused. - This uses a single buffer for string operations. - - - Nicko Cadell - - - Create an instance of - the format provider to use - - - Create an instance of - - - - Override Dispose to prevent closing of writer - - flag - - - Override Dispose to prevent closing of writer - - - - - Reset this string writer so that it can be reused. - - the maximum buffer capacity before it is trimmed - the default size to make the buffer - - - Reset this string writer so that it can be reused. - The internal buffers are cleared and reset. - - - - - Utility class for system specific information. - - - - Utility class of static methods for system specific information. - - - Nicko Cadell - Gert Driesen - Alexey Solofnenko - - - Initialize default values for private static fields. - - - - Only static methods are exposed from this type. - - - - - Private constructor to prevent instances. - - - - Only static methods are exposed from this type. - - - - - Gets an empty array of types. - - - - The Type.EmptyTypes field is not available on - the .NET Compact Framework 1.0. - - - - - Cache the host name for the current machine - - - - Cache the application friendly name - - - - Text to output when a null is encountered. - - - - Text to output when an unsupported feature is requested. - - - - Start time for the current process. - - - - Gets the system dependent line terminator. - - - The system dependent line terminator. - - - - Gets the system dependent line terminator. - - - - - Gets the base directory for this . - - The base directory path for the current . - - - Gets the base directory for this . - - - The value returned may be either a local file path or a URI. - - - - - Gets the path to the configuration file for the current . - - The path to the configuration file for the current . - - - The .NET Compact Framework 1.0 does not have a concept of a configuration - file. For this runtime, we use the entry assembly location as the root for - the configuration file name. - - - The value returned may be either a local file path or a URI. - - - - - Gets the path to the file that first executed in the current . - - The path to the entry assembly. - - - Gets the path to the file that first executed in the current . - - - - - Gets the ID of the current thread. - - The ID of the current thread. - - - On the .NET framework, the AppDomain.GetCurrentThreadId method - is used to obtain the thread ID for the current thread. This is the - operating system ID for the thread. - - - On the .NET Compact Framework 1.0 it is not possible to get the - operating system thread ID for the current thread. The native method - GetCurrentThreadId is implemented inline in a header file - and cannot be called. - - - On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this - gives a stable id unrelated to the operating system thread ID which may - change if the runtime is using fibers. - - - - - Get the host name or machine name for the current machine - - - The hostname or machine name - - - - Get the host name or machine name for the current machine - - - The host name () or - the machine name (Environment.MachineName) for - the current machine, or if neither of these are available - then NOT AVAILABLE is returned. - - - - - Get this application's friendly name - - - The friendly name of this application as a string - - - - If available the name of the application is retrieved from - the AppDomain using AppDomain.CurrentDomain.FriendlyName. - - - Otherwise the file name of the entry assembly is used. - - - - - Get the start time for the current process. - - - - This is the time at which the log4net library was loaded into the - AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime - this is not the start time for the current process. - - - The log4net library should be loaded by an application early during its - startup, therefore this start time should be a good approximation for - the actual start time. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating, however this start time - will be set per AppDomain. - - - - - Text to output when a null is encountered. - - - - Use this value to indicate a null has been encountered while - outputting a string representation of an item. - - - The default value is (null). This value can be overridden by specifying - a value for the log4net.NullText appSetting in the application's - .config file. - - - - - Text to output when an unsupported feature is requested. - - - - Use this value when an unsupported feature is requested. - - - The default value is NOT AVAILABLE. This value can be overridden by specifying - a value for the log4net.NotAvailableText appSetting in the application's - .config file. - - - - - Gets the assembly location path for the specified assembly. - - The assembly to get the location for. - The location of the assembly. - - - This method does not guarantee to return the correct path - to the assembly. If only tries to give an indication as to - where the assembly was loaded from. - - - - - Gets the fully qualified name of the , including - the name of the assembly from which the was - loaded. - - The to get the fully qualified name for. - The fully qualified name for the . - - - This is equivalent to the Type.AssemblyQualifiedName property, - but this method works on the .NET Compact Framework 1.0 as well as - the full .NET runtime. - - - - - Gets the short name of the . - - The to get the name for. - The short name of the . - - - The short name of the assembly is the - without the version, culture, or public key. i.e. it is just the - assembly's file name without the extension. - - - Use this rather than Assembly.GetName().Name because that - is not available on the Compact Framework. - - - Because of a FileIOPermission security demand we cannot do - the obvious Assembly.GetName().Name. We are allowed to get - the of the assembly so we - start from there and strip out just the assembly name. - - - - - Gets the file name portion of the , including the extension. - - The to get the file name for. - The file name of the assembly. - - - Gets the file name portion of the , including the extension. - - - - - Loads the type specified in the type string. - - A sibling type to use to load the type. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified, it will be loaded from the assembly - containing the specified relative type. If the type is not found in the assembly - then all the loaded assemblies will be searched for the type. - - - - - Loads the type specified in the type string. - - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the - assembly that is directly calling this method. If the type is not found - in the assembly then all the loaded assemblies will be searched for the type. - - - - - Loads the type specified in the type string. - - An assembly to load the type from. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the specified - assembly. If the type is not found in the assembly then all the loaded assemblies - will be searched for the type. - - - - - Generate a new guid - - A new Guid - - - Generate a new guid - - - - - Create an - The name of the parameter that caused the exception - The value of the argument that causes this exception - The message that describes the error - the ArgumentOutOfRangeException object - - - Create a new instance of the class - with a specified error message, the parameter name, and the value - of the argument. - - - The Compact Framework does not support the 3 parameter constructor for the - type. This method provides an - implementation that works for all platforms. - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - Lookup an application setting - - the application settings key to lookup - the value for the key, or null - - - Configuration APIs are not supported under the Compact Framework - - - - - Convert a path into a fully qualified local file path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - The path specified must be a local file path, a URI is not supported. - - - - - Creates a new case-insensitive instance of the class with the default initial capacity. - - A new case-insensitive instance of the class with the default initial capacity - - - The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. - - - - - Utility class that represents a format string. - - - - Utility class that represents a format string. - - - Nicko Cadell - - - Initialise the - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - - Format the string and arguments - - the formatted string - - - Replaces the format item in a specified with the text equivalent - of the value of a corresponding instance in a specified array. - A specified parameter supplies culture-specific formatting information. - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - A copy of format in which the format items have been replaced by the - equivalent of the corresponding instances of in args. - - - - This method does not throw exceptions. If an exception thrown while formatting the result the - exception and arguments are returned in the result string. - - - - - Process an error during StringFormat - - - - Dump the contents of an array into a string builder - - - - Dump an object to a string - - - - Adapter that extends and forwards all - messages to an instance of . - - - - Adapter that extends and forwards all - messages to an instance of . - - - Nicko Cadell - - - Create an instance of that forwards all - messages to a . - - The to forward to - - - Create an instance of that forwards all - messages to a . - - - - - The writer to forward messages to - - - - Gets or sets the underlying . - - - The underlying . - - - - Gets or sets the underlying . - - - - - The Encoding in which the output is written - - - The - - - The Encoding in which the output is written - - - - - Gets an object that controls formatting - - - The format provider - - - - Gets an object that controls formatting - - - - - Gets or sets the line terminator string used by the TextWriter - - - The line terminator to use - - - - Gets or sets the line terminator string used by the TextWriter - - - - - Closes the writer and releases any system resources associated with the writer - - - - - - - - Dispose this writer - - flag indicating if we are being disposed - - - Dispose this writer - - - - - Flushes any buffered output - - - - Clears all buffers for the writer and causes any buffered data to be written - to the underlying device - - - - - Writes a character to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a character to the wrapped TextWriter - - - - - Writes a character buffer to the wrapped TextWriter - - the data buffer - the start index - the number of characters to write - - - Writes a character buffer to the wrapped TextWriter - - - - - Writes a string to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a string to the wrapped TextWriter - - - - - Implementation of Properties collection for the - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - Nicko Cadell - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - The thread local data slot to use to store a PropertiesDictionary. - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - Remove a property - - the key for the entry to remove - - - Remove a property - - - - - Clear all properties - - - - Clear all properties - - - - - Get the PropertiesDictionary for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doing so. - - - - - Implementation of Stack for the - - - Implementation of Stack for the - - Nicko Cadell - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - Inner class used to represent a single context frame in the stack. - - - - Inner class used to represent a single context frame in the stack. - - - - - Constructor - - The message for this context. - The parent context in the chain. - - - Initializes a new instance of the class - with the specified message and parent context. - - - - - Get the message. - - The message. - - - Get the message. - - - - - Gets the full text of the context down to the root level. - - - The full text of the context down to the root level. - - - - Gets the full text of the context down to the root level. - - - - - Struct returned from the method. - - - - This struct implements the and is designed to be used - with the pattern to remove the stack frame at the end of the scope. - - - - - Constructor - - The internal stack used by the ThreadContextStack. - The depth to return the stack to when this object is disposed. - - - Initializes a new instance of the class with - the specified stack and return depth. - - - - - The ThreadContextStack internal stack - - - - The depth to trim the stack to when this instance is disposed - - - - Returns the stack to the correct depth. - - - - Returns the stack to the correct depth. - - - - - The stack store. - - - - The number of messages in the stack - - - The current number of messages in the stack - - - - The current number of messages in the stack. That is - the number of times has been called - minus the number of times has been called. - - - - - Gets and sets the internal stack used by this - The internal storage stack - - - This property is provided only to support backward compatability - of the . Tytpically the internal stack should not - be modified. - - - - - Get a portable version of this object - - the portable instance of this object - - - Get a cross thread portable version of this object - - - - - Clears all the contextual information held in this stack. - - - - Clears all the contextual information held in this stack. - Only call this if you think that this tread is being reused after - a previous call execution which may not have completed correctly. - You do not need to use this method if you always guarantee to call - the method of the - returned from even in exceptional circumstances, - for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - syntax. - - - - - Removes the top context from this stack. - - The message in the context that was removed from the top of this stack. - - - Remove the top context from this stack, and return - it to the caller. If this stack is empty then an - empty string (not ) is returned. - - - - - Pushes a new context message into this stack. - - The new context message. - - An that can be used to clean up the context stack. - - - - Pushes a new context onto this stack. An - is returned that can be used to clean up this stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - { - log.Warn("This should have an ThreadContext Stack message"); - } - - - - Gets the current context information for this stack. - - The current context information. - - - Gets the current context information for this stack. - - Gets the current context information - - - Gets the current context information for this stack. - - - - - Implementation of Stacks collection for the - - - Implementation of Stacks collection for the - - Nicko Cadell - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - Gets the named thread context stack - - - The named stack - - - - Gets the named thread context stack - - - - - Utility class for transforming strings. - - - - Utility class for transforming strings. - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Write a string to an - the writer to write to - the string to write - The string to replace non XML compliant chars with - - - The test is escaped either using XML escape entities - or using CDATA sections. - - - - - Replace invalid XML characters in text string - - the XML text input string - the string to use in place of invalid characters - A string that does not contain invalid XML characters. - - - Certain Unicode code points are not allowed in the XML InfoSet, for - details see: http://www.w3.org/TR/REC-xml/#charsets. - - - This method replaces any illegal characters in the input string - with the mask string specified. - - - - - Count the number of times that the substring occurs in the text - - the text to search - the substring to find - the number of times the substring occurs in the text - - - The substring is assumed to be non repeating within itself. - - - - - The log4net Global Context. - - - - The GlobalContext provides a location for global debugging - information to be stored. - - - The global context has a properties map and these properties can - be included in the output of log messages. The - supports selecting and outputing these properties. - - - By default the log4net:HostName property is set to the name of - the current machine. - - - - - GlobalContext.Properties["hostname"] = Environment.MachineName; - - - - Nicko Cadell - - - Private Constructor. - - - Uses a private access modifier to prevent instantiation of this class. - - - - The global context properties instance - - - - The global properties map. - - - The global properties map. - - - - The global properties map. - - - - - The log4net Logical Thread Context. - - - - The LogicalThreadContext provides a location for specific debugging - information to be stored. - The LogicalThreadContext properties override any or - properties with the same name. - - - The Logical Thread Context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Logical Thread Context provides a diagnostic context for the current call context. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Logical Thread Context is managed on a per basis. - - - Example of using the thread context properties to store a username. - - LogicalThreadContext.Properties["user"] = userName; - log.Info("This log message has a LogicalThreadContext Property called 'user'"); - - Example of how to push a message into the context stack - - using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) - { - log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); - } // at the end of the using block the message is automatically popped - - - Nicko Cadell - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - The thread context properties instance - - - - The thread context stacks instance - - - - The thread properties map - - - The thread properties map - - - - The LogicalThreadContext properties override any - or properties with the same name. - - - - - The thread stacks - - - stack map - - - - The logical thread stacks. - - - - - This class is used by client applications to request logger instances. - - - - This class has static methods that are used by a client to request - a logger instance. The method is - used to retrieve a logger. - - - See the interface for more details. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - log.Info("Application Start"); - log.Debug("This is a debug message"); - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - The wrapper map to use to hold the objects. - - - Returns the named logger if it exists. - - Returns the named logger if it exists. - - - - If the named logger exists (in the default repository) then it - returns a reference to the logger, otherwise it returns null. - - - The fully qualified logger name to look for. - The logger found, or null if no logger could be found. - - - Returns the named logger if it exists. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the logger doesn't exist in the specified - repository. - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the repository for the specified assembly) then it - returns a reference to the logger, otherwise it returns - null. - - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger, or null if the logger doesn't exist in the specified - assembly's repository. - - - Get the currently defined loggers. - - Returns all the currently defined loggers in the default repository. - - - The root logger is not included in the returned array. - - All the defined loggers. - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - - The root logger is not included in the returned array. - - All the defined loggers. - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - - The root logger is not included in the returned array. - - All the defined loggers. - - Get or create a logger. - - Retrieves or creates a named logger. - - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - Shorthand for . - - - Get the logger for the fully qualified name of the type specified. - - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The repository to lookup in. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The assembly to use to lookup the repository. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - Shutdown a logger repository. - - Shuts down the default repository. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - default repository. - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Shuts down the repository for the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The repository to shutdown. - - - Shuts down the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The assembly to use to lookup the repository. - - Reset the configuration of a repository - - Resets all values contained in this repository instance to their defaults. - - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The repository to reset. - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The assembly to use to lookup the repository to reset. - - Get the logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - Get a logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - Create a domain - - Creates a repository with the specified repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - Create a logger repository. - - Creates a repository with the specified repository type. - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - - - Creates a repository with the specified name. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - Creates a repository with the specified name. - - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - Creates a repository with the specified name and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - Creates a repository with the specified name and repository type. - - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - Creates a repository for the specified assembly and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - Creates a repository for the specified assembly and repository type. - - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - Gets the list of currently defined repositories. - - - - Get an array of all the objects that have been created. - - - An array of all the known objects. - - - Looks up the wrapper object for the logger specified. - - The logger to get the wrapper for. - The wrapper for the logger specified. - - - Looks up the wrapper objects for the loggers specified. - - The loggers to get the wrappers for. - The wrapper objects for the loggers specified. - - - Create the objects used by - this manager. - - The logger to wrap. - The wrapper for the logger specified. - - - Implementation of Mapped Diagnostic Contexts. - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - The MDC class is similar to the class except that it is - based on a map instead of a stack. It provides mapped - diagnostic contexts. A Mapped Diagnostic Context, or - MDC in short, is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The MDC is managed on a per thread basis. - - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - Gets the context value identified by the parameter. - - The key to lookup in the MDC. - The string value held for the key, or a null reference if no corresponding value is found. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - If the parameter does not look up to a - previously defined context then null will be returned. - - - - - Add an entry to the MDC - - The key to store the value under. - The value to store. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Puts a context value (the parameter) as identified - with the parameter into the current thread's - context map. - - - If a value is already defined for the - specified then the value will be replaced. If the - is specified as null then the key value mapping will be removed. - - - - - Removes the key value mapping for the key specified. - - The key to remove. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove the specified entry from this thread's MDC - - - - - Clear all entries in the MDC - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove all the entries from this thread's MDC - - - - - Implementation of Nested Diagnostic Contexts. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - A Nested Diagnostic Context, or NDC in short, is an instrument - to distinguish interleaved log output from different sources. Log - output is typically interleaved when a server handles multiple - clients near-simultaneously. - - - Interleaved log output can still be meaningful if each log entry - from different contexts had a distinctive stamp. This is where NDCs - come into play. - - - Note that NDCs are managed on a per thread basis. The NDC class - is made up of static methods that operate on the context of the - calling thread. - - - How to push a message into the context - - using(NDC.Push("my context message")) - { - ... all log calls will have 'my context message' included ... - } // at the end of the using block the message is automatically removed - - - Nicko Cadell - Gert Driesen - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - Gets the current context depth. - - The current context depth. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The number of context values pushed onto the context stack. - - - Used to record the current depth of the context. This can then - be restored using the method. - - - - - - Clears all the contextual information held on the current thread. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Clears the stack of NDC data held on the current thread. - - - - - Creates a clone of the stack of context information. - - A clone of the context info for this thread. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The results of this method can be passed to the - method to allow child threads to inherit the context of their - parent thread. - - - - - Inherits the contextual information from another thread. - - The context stack to inherit. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This thread will use the context information from the stack - supplied. This can be used to initialize child threads with - the same contextual information as their parent threads. These - contexts will NOT be shared. Any further contexts that - are pushed onto the stack will not be visible to the other. - Call to obtain a stack to pass to - this method. - - - - - Removes the top context from the stack. - - - The message in the context that was removed from the top - of the stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Remove the top context from the stack, and return - it to the caller. If the stack is empty then an - empty string (not null) is returned. - - - - - Pushes a new context message. - - The new context message. - - An that can be used to clean up - the context stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Pushes a new context onto the context stack. An - is returned that can be used to clean up the context stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.NDC.Push("NDC_Message")) - { - log.Warn("This should have an NDC message"); - } - - - - Removes the context information for this thread. It is - not required to call this method. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This method is not implemented. - - - - - Forces the stack depth to be at most . - - The maximum depth of the stack - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Forces the stack depth to be at most . - This may truncate the head of the stack. This only affects the - stack in the current thread. Also it does not prevent it from - growing, it only sets the maximum depth at the time of the - call. This can be used to return to a known context depth. - - - - - The log4net Thread Context. - - - - The ThreadContext provides a location for thread specific debugging - information to be stored. - The ThreadContext properties override any - properties with the same name. - - - The thread context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Thread Context provides a diagnostic context for the current thread. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Thread Context is managed on a per thread basis. - - - Example of using the thread context properties to store a username. - - ThreadContext.Properties["user"] = userName; - log.Info("This log message has a ThreadContext Property called 'user'"); - - Example of how to push a message into the context stack - - using(ThreadContext.Stacks["NDC"].Push("my context message")) - { - log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); - } // at the end of the using block the message is automatically popped - - - Nicko Cadell - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - The thread context properties instance - - - - The thread context stacks instance - - - - The thread properties map - - - The thread properties map - - - - The ThreadContext properties override any - properties with the same name. - - - - - The thread stacks - - - stack map - - - - The thread local stacks. - - - - - Delegate used to handle logger repository creation event notifications - - The which created the repository. - The event args - that holds the instance that has been created. - - - Delegate used to handle logger repository creation event notifications. - - - - - Delegate used to handle creation of new wrappers. - - The logger to wrap in a wrapper. - - - Delegate used to handle creation of new wrappers. This delegate - is called from the - method to construct the wrapper for the specified logger. - - - The delegate to use is supplied to the - constructor. - - - - - Delegate used to handle logger creation event notifications. - - The in which the has been created. - The event args that hold the instance that has been created. - - - Delegate used to handle logger creation event notifications. - - - - - Delegate used to handle logger repository shutdown event notifications - - The that is shutting down. - Empty event args - - - Delegate used to handle logger repository shutdown event notifications. - - - - - Delegate used to handle logger repository configuration reset event notifications - - The that has had its configuration reset. - Empty event args - - - Delegate used to handle logger repository configuration reset event notifications. - - - - - Delegate used to handle event notifications for logger repository configuration changes. - - The that has had its configuration changed. - Empty event arguments. - - - Delegate used to handle event notifications for logger repository configuration changes. - - - - - Defined error codes that can be passed to the method. - - - - Values passed to the method. - - - Nicko Cadell - - - Unable to open output file - - - - Failed to parse address - - - - Failed to close file - - - - No layout specified - - - - Error while writing output - - - - A general error - - - - Failed to flush file - - - - Flags passed to the property - - - - Flags passed to the property - - - Nicko Cadell - - - Fix the callers location information - - - CAUTION: Very slow to generate - - - - Fix the rendered message - - - - Fix the exception text - - - - Partial fields fixed - - - - This set of partial fields gives good performance. The following fields are fixed: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Fix the callers principal name - - - CAUTION: May be slow to generate - - - - Fix the NDC - - - - Fix the MDC - - - - Fix the callers windows user name - - - CAUTION: Slow to generate - - - - Fix the event properties - - - - No fields fixed - - - - All fields fixed - - - - Fix the thread name - - - - Fix the domain friendly name - - - - The return result from - - - The return result from - - - - The log event must be dropped immediately without - consulting with the remaining filters, if any, in the chain. - - - - This filter is neutral with respect to the log event. - The remaining filters, if any, should be consulted for a final decision. - - - - The log event must be logged immediately without - consulting with the remaining filters, if any, in the chain. - - - diff --git a/lib/log4net/net-3.5/log4net.dll b/lib/log4net/net-3.5/log4net.dll deleted file mode 100644 index ffc57e11254ad9530867b35d15aaf38eb4747d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270336 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 - - - log4net - - - - - Appender that logs to a database. - - - - appends logging events to a table within a - database. The appender can be configured to specify the connection - string by setting the property. - The connection type (provider) can be specified by setting the - property. For more information on database connection strings for - your specific database see http://www.connectionstrings.com/. - - - Records are written into the database either using a prepared - statement or a stored procedure. The property - is set to (System.Data.CommandType.Text) to specify a prepared statement - or to (System.Data.CommandType.StoredProcedure) to specify a stored - procedure. - - - The prepared statement text or the name of the stored procedure - must be set in the property. - - - The prepared statement or stored procedure can take a number - of parameters. Parameters are added using the - method. This adds a single to the - ordered list of parameters. The - type may be subclassed if required to provide database specific - functionality. The specifies - the parameter name, database type, size, and how the value should - be generated using a . - - - - An example of a SQL Server table that could be logged to: - - CREATE TABLE [dbo].[Log] ( - [ID] [int] IDENTITY (1, 1) NOT NULL , - [Date] [datetime] NOT NULL , - [Thread] [varchar] (255) NOT NULL , - [Level] [varchar] (20) NOT NULL , - [Logger] [varchar] (255) NOT NULL , - [Message] [varchar] (4000) NOT NULL - ) ON [PRIMARY] - - - - An example configuration to log to the above table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Julian Biddle - Nicko Cadell - Gert Driesen - Lance Nehring - - - - Abstract base class implementation of that - buffers events in a fixed size buffer. - - - - This base class should be used by appenders that need to buffer a - number of events before logging them. For example the - buffers events and then submits the entire contents of the buffer to - the underlying database in one go. - - - Subclasses should override the - method to deliver the buffered events. - - The BufferingAppenderSkeleton maintains a fixed size cyclic - buffer of events. The size of the buffer is set using - the property. - - A is used to inspect - each event as it arrives in the appender. If the - triggers, then the current buffer is sent immediately - (see ). Otherwise the event - is stored in the buffer. For example, an evaluator can be used to - deliver the events immediately when an ERROR event arrives. - - - The buffering appender can be configured in a mode. - By default the appender is NOT lossy. When the buffer is full all - the buffered events are sent with . - If the property is set to true then the - buffer will not be sent when it is full, and new events arriving - in the appender will overwrite the oldest event in the buffer. - In lossy mode the buffer will only be sent when the - triggers. This can be useful behavior when you need to know about - ERROR events but not about events with a lower level, configure an - evaluator that will trigger when an ERROR event arrives, the whole - buffer will be sent which gives a history of events leading up to - the ERROR event. - - - Nicko Cadell - Gert Driesen - - - - Abstract base class implementation of . - - - - This class provides the code for common functionality, such - as support for threshold filtering and support for general filters. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface for your own strategies for printing log statements. - - - - Implementors should consider extending the - class which provides a default implementation of this interface. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Log the logging event in Appender specific way. - - The event to log - - - This method is called to log a message into this appender. - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - The name uniquely identifies the appender. - - - - - Interface for appenders that support bulk logging. - - - - This interface extends the interface to - support bulk logging of objects. Appenders - should only implement this interface if they can bulk log efficiently. - - - Nicko Cadell - - - - Log the array of logging events in Appender specific way. - - The events to log - - - This method is called to log an array of events into this appender. - - - - - - Interface used to delay activate a configured object. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then the method - must be called by the container after its all the configured properties have been set - and before the component can be used. - - - Nicko Cadell - - - - Activate the options that were previously set with calls to properties. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then this method must be called - after its properties have been set before the component can be used. - - - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Default constructor - - - Empty default constructor - - - - - Finalizes this appender by calling the implementation's - method. - - - - If this appender has not been closed then the Finalize method - will call . - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Closes the appender and release resources. - - - - Release any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - This method cannot be overridden by subclasses. This method - delegates the closing of the appender to the - method which must be overridden in the subclass. - - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The event to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the abstract method. - - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The array of events to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the method. - - - - - - Test if the logging event should we output by this appender - - the event to test - true if the event should be output, false if the event should be ignored - - - This method checks the logging event against the threshold level set - on this appender and also against the filters specified on this - appender. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - - - - - Adds a filter to the end of the filter chain. - - the filter to add to this appender - - - The Filters are organized in a linked list. - - - Setting this property causes the new filter to be pushed onto the - back of the filter chain. - - - - - - Clears the filter list for this appender. - - - - Clears the filter list for this appender. - - - - - - Checks if the message level is below this appender's threshold. - - to test against. - - - If there is no threshold set, then the return value is always true. - - - - true if the meets the - requirements of this appender. - - - - - Is called when the appender is closed. Derived classes should override - this method if resources need to be released. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Subclasses of should implement this method - to perform actual logging. - - The event to append. - - - A subclass must implement this method to perform - logging of the . - - This method will be called by - if all the conditions listed for that method are met. - - - To restrict the logging of events in the appender - override the method. - - - - - - Append a bulk array of logging events. - - the array of logging events - - - This base class implementation calls the - method for each element in the bulk array. - - - A sub class that can better process a bulk array of events should - override this method in addition to . - - - - - - Called before as a precondition. - - - - This method is called by - before the call to the abstract method. - - - This method can be overridden in a subclass to extend the checks - made before the event is passed to the method. - - - A subclass should ensure that they delegate this call to - this base class if it is overridden. - - - true if the call to should proceed. - - - - Renders the to a string. - - The event to render. - The event rendered as a string. - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Where possible use the alternative version of this method - . - That method streams the rendering onto an existing Writer - which can give better performance if the caller already has - a open and ready for writing. - - - - - - Renders the to a string. - - The event to render. - The TextWriter to write the formatted event to - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Use this method in preference to - where possible. If, however, the caller needs to render the event - to a string then does - provide an efficient mechanism for doing so. - - - - - - The layout of this appender. - - - See for more information. - - - - - The name of this appender. - - - See for more information. - - - - - The level threshold of this appender. - - - - There is no level threshold filtering by default. - - - See for more information. - - - - - - It is assumed and enforced that errorHandler is never null. - - - - It is assumed and enforced that errorHandler is never null. - - - See for more information. - - - - - - The first filter in the filter chain. - - - - Set to null initially. - - - See for more information. - - - - - - The last filter in the filter chain. - - - See for more information. - - - - - Flag indicating if this appender is closed. - - - See for more information. - - - - - The guard prevents an appender from repeatedly calling its own DoAppend method - - - - - StringWriter used to render events - - - - - Gets or sets the threshold of this appender. - - - The threshold of the appender. - - - - All log events with lower level than the threshold level are ignored - by the appender. - - - In configuration files this option is specified by setting the - value of the option to a level - string, such as "DEBUG", "INFO" and so on. - - - - - - Gets or sets the for this appender. - - The of the appender - - - The provides a default - implementation for the property. - - - - - - The filter chain. - - The head of the filter chain filter chain. - - - Returns the head Filter. The Filters are organized in a linked list - and so all Filters on this Appender are available through the result. - - - - - - Gets or sets the for this appender. - - The layout of the appender. - - - See for more information. - - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - - The name uniquely identifies the appender. - - - - - - Tests if this appender requires a to be set. - - - - In the rather exceptional case, where the appender - implementation admits a layout but can also work without it, - then the appender should return true. - - - This default implementation always returns true. - - - - true if the appender requires a layout object, otherwise false. - - - - - The default buffer size. - - - The default size of the cyclic buffer used to store events. - This is set to 512 by default. - - - - - Initializes a new instance of the class. - - - - Protected default constructor to allow subclassing. - - - - - - Initializes a new instance of the class. - - the events passed through this appender must be - fixed by the time that they arrive in the derived class' SendBuffer method. - - - Protected constructor to allow subclassing. - - - The should be set if the subclass - expects the events delivered to be fixed even if the - is set to zero, i.e. when no buffering occurs. - - - - - - Flush the currently buffered events - - - - Flushes any events that have been buffered. - - - If the appender is buffering in mode then the contents - of the buffer will NOT be flushed to the appender. - - - - - - Flush the currently buffered events - - set to true to flush the buffer of lossy events - - - Flushes events that have been buffered. If is - false then events will only be flushed if this buffer is non-lossy mode. - - - If the appender is buffering in mode then the contents - of the buffer will only be flushed if is true. - In this case the contents of the buffer will be tested against the - and if triggering will be output. All other buffered - events will be discarded. - - - If is true then the buffer will always - be emptied by calling this method. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Close this appender instance. - - - - Close this appender instance. If this appender is marked - as not then the remaining events in - the buffer must be sent when the appender is closed. - - - - - - This method is called by the method. - - the event to log - - - Stores the in the cyclic buffer. - - - The buffer will be sent (i.e. passed to the - method) if one of the following conditions is met: - - - - The cyclic buffer is full and this appender is - marked as not lossy (see ) - - - An is set and - it is triggered for the - specified. - - - - Before the event is stored in the buffer it is fixed - (see ) to ensure that - any data referenced by the event will be valid when the buffer - is processed. - - - - - - Sends the contents of the buffer. - - The first logging event. - The buffer containing the events that need to be send. - - - The subclass must override . - - - - - - Sends the events. - - The events that need to be send. - - - The subclass must override this method to process the buffered events. - - - - - - The size of the cyclic buffer used to hold the logging events. - - - Set to by default. - - - - - The cyclic buffer used to store the logging events. - - - - - The triggering event evaluator that causes the buffer to be sent immediately. - - - The object that is used to determine if an event causes the entire - buffer to be sent immediately. This field can be null, which - indicates that event triggering is not to be done. The evaluator - can be set using the property. If this appender - has the ( property) set to - true then an must be set. - - - - - Indicates if the appender should overwrite events in the cyclic buffer - when it becomes full, or if the buffer should be flushed when the - buffer is full. - - - If this field is set to true then an must - be set. - - - - - The triggering event evaluator filters discarded events. - - - The object that is used to determine if an event that is discarded should - really be discarded or if it should be sent to the appenders. - This field can be null, which indicates that all discarded events will - be discarded. - - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - - The events delivered to the subclass must be fixed. - - - - - Gets or sets a value that indicates whether the appender is lossy. - - - true if the appender is lossy, otherwise false. The default is false. - - - - This appender uses a buffer to store logging events before - delivering them. A triggering event causes the whole buffer - to be send to the remote sink. If the buffer overruns before - a triggering event then logging events could be lost. Set - to false to prevent logging events - from being lost. - - If is set to true then an - must be specified. - - - - - Gets or sets the size of the cyclic buffer used to hold the - logging events. - - - The size of the cyclic buffer used to hold the logging events. - - - - The option takes a positive integer - representing the maximum number of logging events to collect in - a cyclic buffer. When the is reached, - oldest events are deleted as new events are added to the - buffer. By default the size of the cyclic buffer is 512 events. - - - If the is set to a value less than - or equal to 1 then no buffering will occur. The logging event - will be delivered synchronously (depending on the - and properties). Otherwise the event will - be buffered. - - - - - - Gets or sets the that causes the - buffer to be sent immediately. - - - The that causes the buffer to be - sent immediately. - - - - The evaluator will be called for each event that is appended to this - appender. If the evaluator triggers then the current buffer will - immediately be sent (see ). - - If is set to true then an - must be specified. - - - - - Gets or sets the value of the to use. - - - The value of the to use. - - - - The evaluator will be called for each event that is discarded from this - appender. If the evaluator triggers then the current buffer will immediately - be sent (see ). - - - - - - Gets or sets a value indicating if only part of the logging event data - should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the - event data to be fixed and serialized. This will improve performance. - - - See for more information. - - - - - - Gets or sets a the fields that will be fixed in the event - - - The event fields that will be fixed before the event is buffered - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - - Initializes a new instance of the class. - - - Public default constructor to initialize a new instance of this class. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Override the parent method to close the database - - - - Closes the database command and database connection. - - - - - - Inserts the events into the database. - - The events to insert into the database. - - - Insert all the events specified in the - array into the database. - - - - - - Adds a parameter to the command. - - The parameter to add to the command. - - - Adds a parameter to the ordered list of command parameters. - - - - - - Writes the events to the database using the transaction specified. - - The transaction that the events will be executed under. - The array of events to insert into the database. - - - The transaction argument can be null if the appender has been - configured not to use transactions. See - property for more information. - - - - - - Formats the log message into database statement text. - - The event being logged. - - This method can be overridden by subclasses to provide - more control over the format of the database statement. - - - Text that can be passed to a . - - - - - Connects to the database. - - - - - Retrieves the class type of the ADO.NET provider. - - - - Gets the Type of the ADO.NET provider to use to connect to the - database. This method resolves the type specified in the - property. - - - Subclasses can override this method to return a different type - if necessary. - - - The of the ADO.NET provider - - - - Prepares the database command and initialize the parameters. - - - - - Flag to indicate if we are using a command object - - - - Set to true when the appender is to use a prepared - statement or stored procedure to insert into the database. - - - - - - The list of objects. - - - - The list of objects. - - - - - - The security context to use for privileged calls - - - - - The that will be used - to insert logging events into a database. - - - - - The database command. - - - - - Database connection string. - - - - - String type name of the type name. - - - - - The text of the command. - - - - - The command type. - - - - - Indicates whether to use transactions when writing to the database. - - - - - Indicates whether to use transactions when writing to the database. - - - - - Gets or sets the database connection string that is used to connect to - the database. - - - The database connection string used to connect to the database. - - - - The connections string is specific to the connection type. - See for more information. - - - Connection string for MS Access via ODBC: - "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" - - Another connection string for MS Access via ODBC: - "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" - - Connection string for MS Access via OLE DB: - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" - - - - - Gets or sets the type name of the connection - that should be created. - - - The type name of the connection. - - - - The type name of the ADO.NET provider to use. - - - The default is to use the OLE DB provider. - - - Use the OLE DB Provider. This is the default value. - System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Use the MS SQL Server Provider. - System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Use the ODBC Provider. - Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for ODBC .NET Data Provider. - - Use the Oracle Provider. - System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for .NET Managed Provider for Oracle. - - - - - Gets or sets the command text that is used to insert logging events - into the database. - - - The command text used to insert logging events into the database. - - - - Either the text of the prepared statement or the - name of the stored procedure to execute to write into - the database. - - - The property determines if - this text is a prepared statement or a stored procedure. - - - - - - Gets or sets the command type to execute. - - - The command type to execute. - - - - This value may be either (System.Data.CommandType.Text) to specify - that the is a prepared statement to execute, - or (System.Data.CommandType.StoredProcedure) to specify that the - property is the name of a stored procedure - to execute. - - - The default value is (System.Data.CommandType.Text). - - - - - - Should transactions be used to insert logging events in the database. - - - true if transactions should be used to insert logging events in - the database, otherwise false. The default value is true. - - - - Gets or sets a value that indicates whether transactions should be used - to insert logging events in the database. - - - When set a single transaction will be used to insert the buffered events - into the database. Otherwise each event will be inserted without using - an explicit transaction. - - - - - - Gets or sets the used to call the NetSend method. - - - The used to call the NetSend method. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - Should this appender try to reconnect to the database on error. - - - true if the appender should try to reconnect to the database after an - error has occurred, otherwise false. The default value is false, - i.e. not to try to reconnect. - - - - The default behaviour is for the appender not to try to reconnect to the - database if an error occurs. Subsequent logging events are discarded. - - - To force the appender to attempt to reconnect to the database set this - property to true. - - - When the appender attempts to connect to the database there may be a - delay of up to the connection timeout specified in the connection string. - This delay will block the calling application's thread. - Until the connection can be reestablished this potential delay may occur multiple times. - - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to insert - logging events into a database. Classes deriving from - can use this property to get or set this . Use the - underlying returned from if - you require access beyond that which provides. - - - - - Parameter type used by the . - - - - This class provides the basic database parameter properties - as defined by the interface. - - This type can be subclassed to provide database specific - functionality. The two methods that are called externally are - and . - - - - - - Initializes a new instance of the class. - - - Default constructor for the AdoNetAppenderParameter class. - - - - - Prepare the specified database command object. - - The command to prepare. - - - Prepares the database command object by adding - this parameter to its collection of parameters. - - - - - - Renders the logging event and set the parameter value in the command. - - The command containing the parameter. - The event to be rendered. - - - Renders the logging event using this parameters layout - object. Sets the value of the parameter on the command object. - - - - - - The name of this parameter. - - - - - The database type for this parameter. - - - - - Flag to infer type rather than use the DbType - - - - - The precision for this parameter. - - - - - The scale for this parameter. - - - - - The size for this parameter. - - - - - The to use to render the - logging event into an object for this parameter. - - - - - Gets or sets the name of this parameter. - - - The name of this parameter. - - - - The name of this parameter. The parameter name - must match up to a named parameter to the SQL stored procedure - or prepared statement. - - - - - - Gets or sets the database type for this parameter. - - - The database type for this parameter. - - - - The database type for this parameter. This property should - be set to the database type from the - enumeration. See . - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the type from the value. - - - - - - - Gets or sets the precision for this parameter. - - - The precision for this parameter. - - - - The maximum number of digits used to represent the Value. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the precision from the value. - - - - - - - Gets or sets the scale for this parameter. - - - The scale for this parameter. - - - - The number of decimal places to which Value is resolved. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the scale from the value. - - - - - - - Gets or sets the size for this parameter. - - - The size for this parameter. - - - - The maximum size, in bytes, of the data within the column. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the size from the value. - - - - - - - Gets or sets the to use to - render the logging event into an object for this - parameter. - - - The used to render the - logging event into an object for this parameter. - - - - The that renders the value for this - parameter. - - - The can be used to adapt - any into a - for use in the property. - - - - - - Appends logging events to the terminal using ANSI color escape sequences. - - - - AnsiColorTerminalAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. It also allows the color of a specific level of message to be set. - - - This appender expects the terminal to understand the VT100 control set - in order to interpret the color codes. If the terminal or console does not - understand the control codes the behavior is not defined. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - When configuring the ANSI colored terminal appender, a mapping should be - specified to map a logging level to a color. For example: - - - - - - - - - - - - - - - The Level is the standard log4net logging level and ForeColor and BackColor can be any - of the following values: - - Blue - Green - Red - White - Yellow - Purple - Cyan - - These color values cannot be combined together to make new colors. - - - The attributes can be any combination of the following: - - Brightforeground is brighter - Dimforeground is dimmer - Underscoremessage is underlined - Blinkforeground is blinking (does not work on all terminals) - Reverseforeground and background are reversed - Hiddenoutput is hidden - Strikethroughmessage has a line through it - - While any of these attributes may be combined together not all combinations - work well together, for example setting both Bright and Dim attributes makes - no sense. - - - Patrick Wagstrom - Nicko Cadell - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Ansi code to reset terminal - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Add a mapping of level to color - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the foreground and background colours - for a level. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to color mappings set on this appender. - - - - - - Flag to write output to the error stream rather than the standard output stream - - - - - Mapping from level object to color value - - - - - Target is the value of the console output stream. - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - The enum of possible display attributes - - - - The following flags can be combined together to - form the ANSI color attributes. - - - - - - - text is bright - - - - - text is dim - - - - - text is underlined - - - - - text is blinking - - - Not all terminals support this attribute - - - - - text and background colors are reversed - - - - - text is hidden - - - - - text is displayed with a strikethrough - - - - - The enum of possible foreground or background color values for - use with the color mapping method - - - - The output can be in one for the following ANSI colors. - - - - - - - color is black - - - - - color is red - - - - - color is green - - - - - color is yellow - - - - - color is blue - - - - - color is magenta - - - - - color is cyan - - - - - color is white - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and the color it should be displayed in. - - - - - - An entry in the - - - - This is an abstract base class for types that are stored in the - object. - - - Nicko Cadell - - - - Default protected constructor - - - - Default protected constructor - - - - - - Initialize any options defined on this entry - - - - Should be overridden by any classes that need to initialise based on their options - - - - - - The level that is the key for this mapping - - - The that is the key for this mapping - - - - Get or set the that is the key for this - mapping subclass. - - - - - - Initialize the options for the object - - - - Combine the and together - and append the attributes. - - - - - - The mapped foreground color for the specified level - - - - Required property. - The mapped foreground color for the specified level - - - - - - The mapped background color for the specified level - - - - Required property. - The mapped background color for the specified level - - - - - - The color attributes for the specified level - - - - Required property. - The color attributes for the specified level - - - - - - The combined , and - suitable for setting the ansi terminal color. - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a AppenderCollection instance. - - list to create a readonly wrapper arround - - An AppenderCollection wrapper that is read-only. - - - - - An empty readonly static AppenderCollection - - - - - Initializes a new instance of the AppenderCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the AppenderCollection class - that has the specified initial capacity. - - - The number of elements that the new AppenderCollection is initially capable of storing. - - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified AppenderCollection. - - The AppenderCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - - Copies the entire AppenderCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire AppenderCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the AppenderCollection. - - The to be added to the end of the AppenderCollection. - The index at which the value has been added. - - - - Removes all elements from the AppenderCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the AppenderCollection. - - The to check for. - true if is found in the AppenderCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the AppenderCollection. - - The to locate in the AppenderCollection. - - The zero-based index of the first occurrence of - in the entire AppenderCollection, if found; otherwise, -1. - - - - - Inserts an element into the AppenderCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the AppenderCollection. - - The to remove from the AppenderCollection. - - The specified was not found in the AppenderCollection. - - - - - Removes the element at the specified index of the AppenderCollection. - - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the AppenderCollection. - - An for the entire AppenderCollection. - - - - Adds the elements of another AppenderCollection to the current AppenderCollection. - - The AppenderCollection whose elements should be added to the end of the current AppenderCollection. - The new of the AppenderCollection. - - - - Adds the elements of a array to the current AppenderCollection. - - The array whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - - Adds the elements of a collection to the current AppenderCollection. - - The collection whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - - Sets the capacity to the actual number of elements. - - - - - Return the collection elements as an array - - the array - - - - is less than zero - -or- - is equal to or greater than . - - - - - is less than zero - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the AppenderCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - is less than zero - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - - Gets or sets the number of elements the AppenderCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - - A value - - - - - Supports simple iteration over a . - - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - - - - - Appends log events to the ASP.NET system. - - - - - Diagnostic information and tracing messages that you specify are appended to the output - of the page that is sent to the requesting browser. Optionally, you can view this information - from a separate trace viewer (Trace.axd) that displays trace information for every page in a - given application. - - - Trace statements are processed and displayed only when tracing is enabled. You can control - whether tracing is displayed to a page, to the trace viewer, or both. - - - The logging event is passed to the or - method depending on the level of the logging event. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Write the logging event to the ASP.NET trace - - the event to log - - - Write the logging event to the ASP.NET trace - HttpContext.Current.Trace - (). - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Buffers events and then forwards them to attached appenders. - - - - The events are buffered in this appender until conditions are - met to allow the appender to deliver the events to the attached - appenders. See for the - conditions that cause the buffer to be sent. - - The forwarding appender can be used to specify different - thresholds and filters for the same appender at different locations - within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Interface for attaching appenders to objects. - - - - Interface for attaching, removing and retrieving appenders. - - - Nicko Cadell - Gert Driesen - - - - Attaches an appender. - - The appender to add. - - - Add the specified appender. The implementation may - choose to allow or deny duplicate appenders. - - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Returns an attached appender with the specified. - If no appender with the specified name is found null will be - returned. - - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Gets all attached appenders. - - - A collection of attached appenders. - - - - Gets a collection of attached appenders. - If there are no attached appenders the - implementation should return an empty - collection rather than null. - - - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Send the events. - - The events that need to be send. - - - Forwards the events to the attached appenders. - - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this buffering appender. - - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Implementation of the interface - - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - - Appends logging events to the console. - - - - ColoredConsoleAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. It also allows the color of a specific type of message to be set. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes directly to the application's attached console - not to the System.Console.Out or System.Console.Error TextWriter. - The System.Console.Out and System.Console.Error streams can be - programmatically redirected (for example NUnit does this to capture program output). - This appender will ignore these redirections because it needs to use Win32 - API calls to colorize the output. To respect these redirections the - must be used. - - - When configuring the colored console appender, mapping should be - specified to map a logging level to a color. For example: - - - - - - - - - - - - - - The Level is the standard log4net logging level and ForeColor and BackColor can be any - combination of the following values: - - Blue - Green - Red - White - Yellow - Purple - Cyan - HighIntensity - - - - Rick Hobbs - Nicko Cadell - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - flag set to true to write to the console error stream - - When is set to true, output is written to - the standard error output stream. Otherwise, output is written to the standard - output stream. - - - - - Add a mapping of level to color - done by the config file - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the foreground and background colors - for a level. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to color mappings set on this appender. - - - - - - Flag to write output to the error stream rather than the standard output stream - - - - - Mapping from level object to color value - - - - - The console output stream writer to write to - - - - This writer is not thread safe. - - - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - The enum of possible color values for use with the color mapping method - - - - The following flags can be combined together to - form the colors. - - - - - - - color is blue - - - - - color is green - - - - - color is red - - - - - color is white - - - - - color is yellow - - - - - color is purple - - - - - color is cyan - - - - - color is intensified - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and the color it should be displayed in. - - - - - - Initialize the options for the object - - - - Combine the and together. - - - - - - The mapped foreground color for the specified level - - - - Required property. - The mapped foreground color for the specified level. - - - - - - The mapped background color for the specified level - - - - Required property. - The mapped background color for the specified level. - - - - - - The combined and suitable for - setting the console color. - - - - - Appends logging events to the console. - - - - ConsoleAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - Nicko Cadell - Gert Driesen - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - flag set to true to write to the console error stream - - When is set to true, output is written to - the standard error output stream. Otherwise, output is written to the standard - output stream. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - debug system. - - - Events are written using the - method. The event's logger name is passed as the value for the category name to the Write method. - - - Nicko Cadell - - - - Initializes a new instance of the . - - - - Default constructor. - - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - If is true then the - is called. - - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Writes events to the system event log. - - - - The EventID of the event log entry can be - set using the EventLogEventID property () - on the . - - - There is a limit of 32K characters for an event log message - - - When configuring the EventLogAppender a mapping can be - specified to map a logging level to an event log entry type. For example: - - - <mapping> - <level value="ERROR" /> - <eventLogEntryType value="Error" /> - </mapping> - <mapping> - <level value="DEBUG" /> - <eventLogEntryType value="Information" /> - </mapping> - - - The Level is the standard log4net logging level and eventLogEntryType can be any value - from the enum, i.e.: - - Erroran error event - Warninga warning event - Informationan informational event - - - - Aspi Havewala - Douglas de la Torre - Nicko Cadell - Gert Driesen - Thomas Voss - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initializes a new instance of the class - with the specified . - - The to use with this appender. - - - Obsolete constructor. - - - - - - Add a mapping of level to - done by the config file - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the event log entry type for a level. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Create an event log source - - - Uses different API calls under NET_2_0 - - - - - This method is called by the - method. - - the event to log - - Writes the event to the system event log using the - . - - If the event has an EventID property (see ) - set then this integer will be used as the event log event id. - - - There is a limit of 32K characters for an event log message - - - - - - Get the equivalent for a - - the Level to convert to an EventLogEntryType - The equivalent for a - - Because there are fewer applicable - values to use in logging levels than there are in the - this is a one way mapping. There is - a loss of information during the conversion. - - - - - The log name is the section in the event logs where the messages - are stored. - - - - - Name of the application to use when logging. This appears in the - application column of the event log named by . - - - - - The name of the machine which holds the event log. This is - currently only allowed to be '.' i.e. the current machine. - - - - - Mapping from level object to EventLogEntryType - - - - - The security context to use for privileged calls - - - - - The name of the log where messages will be stored. - - - The string name of the log where messages will be stored. - - - This is the name of the log as it appears in the Event Viewer - tree. The default value is to log into the Application - log, this is where most applications write their events. However - if you need a separate log for your application (or applications) - then you should set the appropriately. - This should not be used to distinguish your event log messages - from those of other applications, the - property should be used to distinguish events. This property should be - used to group together events into a single log. - - - - - - Property used to set the Application name. This appears in the - event logs when logging. - - - The string used to distinguish events from different sources. - - - Sets the event log source property. - - - - - This property is used to return the name of the computer to use - when accessing the event logs. Currently, this is the current - computer, denoted by a dot "." - - - The string name of the machine holding the event log that - will be logged into. - - - This property cannot be changed. It is currently set to '.' - i.e. the local machine. This may be changed in future. - - - - - Gets or sets the used to write to the EventLog. - - - The used to write to the EventLog. - - - - The system security context used to write to the EventLog. - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and its event log entry type. - - - - - - The for this entry - - - - Required property. - The for this entry - - - - - - Appends logging events to a file. - - - - Logging events are sent to the file specified by - the property. - - - The file can be opened in either append or overwrite mode - by specifying the property. - If the file path is relative it is taken as relative from - the application base directory. The file encoding can be - specified by setting the property. - - - The layout's and - values will be written each time the file is opened and closed - respectively. If the property is - then the file may contain multiple copies of the header and footer. - - - This appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - The supports pluggable file locking models via - the property. - The default behavior, implemented by - is to obtain an exclusive write lock on the file until this appender is closed. - The alternative model, , only holds a - write lock while the appender is writing a logging event. - - - Nicko Cadell - Gert Driesen - Rodrigo B. de Oliveira - Douglas de la Torre - Niall Daley - - - - Sends logging events to a . - - - - An Appender that writes to a . - - - This appender may be used stand alone if initialized with an appropriate - writer, however it is typically used as a base class for an appender that - can open a to write to. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initializes a new instance of the class and - sets the output destination to a new initialized - with the specified . - - The layout to use with this appender. - The to output to. - - - Obsolete constructor. - - - - - - Initializes a new instance of the class and sets - the output destination to the specified . - - The layout to use with this appender - The to output to - - The must have been previously opened. - - - - Obsolete constructor. - - - - - - This method determines if there is a sense in attempting to append. - - - - This method checked if an output target has been set and if a - layout has been set. - - - false if any of the preconditions fail. - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - - This method is called by the - method. - - The array of events to log. - - - This method writes all the bulk logged events to the output writer - before flushing the stream. - - - - - - Close this appender instance. The underlying stream or writer is also closed. - - - Closed appenders cannot be reused. - - - - - Writes the footer and closes the underlying . - - - - Writes the footer and closes the underlying . - - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - - Clears internal references to the underlying - and other variables. - - - - Subclasses can override this method for an alternate closing behavior. - - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - - Called to allow a subclass to lazily initialize the writer - - - - This method is called when an event is logged and the or - have not been set. This allows a subclass to - attempt to initialize the writer multiple times. - - - - - - This is the where logging events - will be written to. - - - - - Immediate flush means that the underlying - or output stream will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logging events are not actually persisted if and when the application - crashes. - - - The default value is true. - - - - - - Gets or set whether the appender will flush at the end - of each append operation. - - - - The default behavior is to flush at the end of each - append operation. - - - If this option is set to false, then the underlying - stream can defer persisting the logging event to a later - time. - - - - Avoiding the flush operation at the end of each append results in - a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - Sets the where the log output will go. - - - - The specified must be open and writable. - - - The will be closed when the appender - instance is closed. - - - Note: Logging to an unopened will fail. - - - - - - Gets or set the and the underlying - , if any, for this appender. - - - The for this appender. - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Gets or sets the where logging events - will be written to. - - - The where logging events are written. - - - - This is the where logging events - will be written to. - - - - - - Default constructor - - - - Default constructor - - - - - - Construct a new appender using the layout, file and append mode. - - the layout to use with this appender - the full path to the file to write to - flag to indicate if the file should be appended to - - - Obsolete constructor. - - - - - - Construct a new appender using the layout and file specified. - The file will be appended to. - - the layout to use with this appender - the full path to the file to write to - - - Obsolete constructor. - - - - - - Activate the options on the file appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This will cause the file to be opened. - - - - - - Closes any previously opened file and calls the parent's . - - - - Resets the filename and the file stream. - - - - - - Called to initialize the file writer - - - - Will be called for each logged message until the file is - successfully opened. - - - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - - This method is called by the - method. - - The array of events to log. - - - Acquires the output file locks once before writing all the events to - the stream. - - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - - Closes the previously opened file. - - - - Writes the to the file and then - closes the file. - - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - Calls but guarantees not to throw an exception. - Errors are passed to the . - - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - If there was already an opened file, then the previous file - is closed first. - - - This method will ensure that the directory structure - for the specified exists. - - - - - - Sets the quiet writer used for file output - - the file stream that has been opened for writing - - - This implementation of creates a - over the and passes it to the - method. - - - This method can be overridden by sub classes that want to wrap the - in some way, for example to encrypt the output - data using a System.Security.Cryptography.CryptoStream. - - - - - - Sets the quiet writer being used. - - the writer over the file stream that has been opened for writing - - - This method can be overridden by sub classes that want to - wrap the in some way. - - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - - Flag to indicate if we should append to the file - or overwrite the file. The default is to append. - - - - - The name of the log file. - - - - - The encoding to use for the file stream. - - - - - The security context to use for privileged calls - - - - - The stream to log to. Has added locking semantics - - - - - The locking model to use - - - - - Gets or sets the path to the file that logging will be written to. - - - The path to the file that logging will be written to. - - - - If the path is relative it is taken as relative from - the application base directory. - - - - - - Gets or sets a flag that indicates whether the file should be - appended to or overwritten. - - - Indicates whether the file should be appended to or overwritten. - - - - If the value is set to false then the file will be overwritten, if - it is set to true then the file will be appended to. - - The default value is true. - - - - - Gets or sets used to write to the file. - - - The used to write to the file. - - - - The default encoding set is - which is the encoding for the system's current ANSI code page. - - - - - - Gets or sets the used to write to the file. - - - The used to write to the file. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - Gets or sets the used to handle locking of the file. - - - The used to lock the file. - - - - Gets or sets the used to handle locking of the file. - - - There are two built in locking models, and . - The former locks the file from the start of logging to the end and the - later lock only for the minimal amount of time when logging each message. - - - The default locking model is the . - - - - - - Write only that uses the - to manage access to an underlying resource. - - - - - True asynchronous writes are not supported, the implementation forces a synchronous write. - - - - - Exception base type for log4net. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class with - the specified message. - - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - - Serialization constructor - - 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 class - with serialized data. - - - - - - Locking model base class - - - - Base class for the locking models available to the derived loggers. - - - - - - Open the output file - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - - Gets or sets the for this LockingModel - - - The for this LockingModel - - - - The file appender this locking model is attached to and working on - behalf of. - - - The file appender is used to locate the security context and the error handler to use. - - - The value of this property will be set before is - called. - - - - - - Hold an exclusive lock on the output file - - - - Open the file once for writing and hold it open until is called. - Maintains an exclusive lock on the file during this time. - - - - - - Open the file specified and prepare for logging. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Does nothing. The lock is already taken - - - - - - Release the lock on the file - - - - Does nothing. The lock will be released when the file is closed. - - - - - - Acquires the file lock for each write - - - - Opens the file once for each / cycle, - thus holding the lock for the minimal amount of time. This method of locking - is considerably slower than but allows - other processes to move/delete the log file whilst logging continues. - - - - - - Prepares to open the file when the first message is logged. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - - This appender forwards logging events to attached appenders. - - - - The forwarding appender can be used to specify different thresholds - and filters for the same appender at different locations within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Forward the logging event to the attached appenders - - The event to log. - - - Delivers the logging event to all the attached appenders. - - - - - - Forward the logging events to the attached appenders - - The array of events to log. - - - Delivers the logging events to all the attached appenders. - - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this appender. - - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Implementation of the interface - - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - - Logs events to a local syslog service. - - - - This appender uses the POSIX libc library functions openlog, syslog, and closelog. - If these functions are not available on the local system then this appender will not work! - - - The functions openlog, syslog, and closelog are specified in SUSv2 and - POSIX 1003.1-2001 standards. These are used to log messages to the local syslog service. - - - This appender talks to a local syslog service. If you need to log to a remote syslog - daemon and you cannot configure your local syslog service to do this you may be - able to use the to log via UDP. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a local syslog service. - - - - - Add a mapping of level to severity - - The mapping to add - - - Adds a to this appender. - - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - - Close the syslog when the appender is closed - - - - Close the syslog when the appender is closed - - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - - The facility. The default facility is . - - - - - The message identity - - - - - Marshaled handle to the identity string. We have to hold on to the - string as the openlog and syslog APIs just hold the - pointer to the ident and dereference it for each log message. - - - - - Mapping from level object to syslog severity - - - - - Open connection to system logger. - - - - - Generate a log message. - - - - The libc syslog method takes a format string and a variable argument list similar - to the classic printf function. As this type of vararg list is not supported - by C# we need to specify the arguments explicitly. Here we have specified the - format string with a single message argument. The caller must set the format - string to "%s". - - - - - - Close descriptor used to write to system logger. - - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - syslog severities - - - - The log4net Level maps to a syslog severity using the - method and the - class. The severity is set on . - - - - - - system is unusable - - - - - action must be taken immediately - - - - - critical conditions - - - - - error conditions - - - - - warning conditions - - - - - normal but significant condition - - - - - informational - - - - - debug-level messages - - - - - syslog facilities - - - - The syslog facility defines which subsystem the logging comes from. - This is set on the property. - - - - - - kernel messages - - - - - random user-level messages - - - - - mail system - - - - - system daemons - - - - - security/authorization messages - - - - - messages generated internally by syslogd - - - - - line printer subsystem - - - - - network news subsystem - - - - - UUCP subsystem - - - - - clock (cron/at) daemon - - - - - security/authorization messages (private) - - - - - ftp daemon - - - - - NTP subsystem - - - - - log audit - - - - - log alert - - - - - clock daemon - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - - Stores logging events in an array. - - - - The memory appender stores all the logging events - that are appended in an in-memory array. - - - Use the method to get - the current list of events that have been appended. - - - Use the method to clear the - current list of events. - - - Julian Biddle - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Gets the events that have been logged. - - The events that have been logged - - - Gets the events that have been logged. - - - - - - This method is called by the method. - - the event to log - - Stores the in the events list. - - - - - Clear the list of events - - - Clear the list of events - - - - - The list of events that have been appended. - - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - - Gets or sets a value indicating whether only part of the logging event - data should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the event - data to be fixed and stored in the appender, hereby improving performance. - - - See for more information. - - - - - - Gets or sets the fields that will be fixed in the event - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - Logs entries by sending network messages using the - native function. - - - - You can send messages only to names that are active - on the network. If you send the message to a user name, - that user must be logged on and running the Messenger - service to receive the message. - - - The receiver will get a top most window displaying the - messages one at a time, therefore this appender should - not be used to deliver a high volume of messages. - - - The following table lists some possible uses for this appender : - - - - - Action - Property Value(s) - - - Send a message to a user account on the local machine - - - = <name of the local machine> - - - = <user name> - - - - - Send a message to a user account on a remote machine - - - = <name of the remote machine> - - - = <user name> - - - - - Send a message to a domain user account - - - = <name of a domain controller | uninitialized> - - - = <user name> - - - - - Send a message to all the names in a workgroup or domain - - - = <workgroup name | domain name>* - - - - - Send a message from the local machine to a remote machine - - - = <name of the local machine | uninitialized> - - - = <name of the remote machine> - - - - - - - Note : security restrictions apply for sending - network messages, see - for more information. - - - - - An example configuration section to log information - using this appender from the local machine, named - LOCAL_PC, to machine OPERATOR_PC : - - - - - - - - - - Nicko Cadell - Gert Driesen - - - - The DNS or NetBIOS name of the server on which the function is to execute. - - - - - The sender of the network message. - - - - - The message alias to which the message should be sent. - - - - - The security context to use for privileged calls - - - - - Initializes the appender. - - - The default constructor initializes all fields to their default values. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The appender will be ignored if no was specified. - - - The required property was not specified. - - - - This method is called by the method. - - The event to log. - - - Sends the event using a network message. - - - - - - Sends a buffer of information to a registered message alias. - - The DNS or NetBIOS name of the server on which the function is to execute. - The message alias to which the message buffer should be sent - The originator of the message. - The message text. - The length, in bytes, of the message text. - - - The following restrictions apply for sending network messages: - - - - - Platform - Requirements - - - Windows NT - - - No special group membership is required to send a network message. - - - Admin, Accounts, Print, or Server Operator group membership is required to - successfully send a network message on a remote server. - - - - - Windows 2000 or later - - - If you send a message on a domain controller that is running Active Directory, - access is allowed or denied based on the access control list (ACL) for the securable - object. The default ACL permits only Domain Admins and Account Operators to send a network message. - - - On a member server or workstation, only Administrators and Server Operators can send a network message. - - - - - - - For more information see Security Requirements for the Network Management Functions. - - - - - If the function succeeds, the return value is zero. - - - - - - Gets or sets the sender of the message. - - - The sender of the message. - - - If this property is not specified, the message is sent from the local computer. - - - - - Gets or sets the message alias to which the message should be sent. - - - The recipient of the message. - - - This property should always be specified in order to send a message. - - - - - Gets or sets the DNS or NetBIOS name of the remote server on which the function is to execute. - - - DNS or NetBIOS name of the remote server on which the function is to execute. - - - - For Windows NT 4.0 and earlier, the string should begin with \\. - - - If this property is not specified, the local computer is used. - - - - - - Gets or sets the used to call the NetSend method. - - - The used to call the NetSend method. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appends log events to the OutputDebugString system. - - - - OutputDebugStringAppender appends log events to the - OutputDebugString system. - - - The string is passed to the native OutputDebugString - function. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Write the logging event to the output debug string API - - the event to log - - - Write the logging event to the output debug string API - - - - - - Stub for OutputDebugString native method - - the string to output - - - Stub for OutputDebugString native method - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Logs events to a remote syslog daemon. - - - - The BSD syslog protocol is used to remotely log to - a syslog daemon. The syslogd listens for for messages - on UDP port 514. - - - The syslog UDP protocol is not authenticated. Most syslog daemons - do not accept remote log messages because of the security implications. - You may be able to use the LocalSyslogAppender to talk to a local - syslog service. - - - There is an RFC 3164 that claims to document the BSD Syslog Protocol. - This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. - This appender generates what the RFC calls an "Original Device Message", - i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation - this format of message will be accepted by all current syslog daemon - implementations. The daemon will attach the current time and the source - hostname or IP address to any messages received. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - - Sends logging events as connectionless UDP datagrams to a remote host or a - multicast group using an . - - - - UDP guarantees neither that messages arrive, nor that they arrive in the correct order. - - - To view the logging results, a custom application can be developed that listens for logging - events. - - - When decoding events send via this appender remember to use the same encoding - to decode the events as was used to send the events. See the - property to specify the encoding to use. - - - - This example shows how to log receive logging events that are sent - on IP address 244.0.0.1 and port 8080 to the console. The event is - encoded in the packet as a unicode string and it is decoded as such. - - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - UdpClient udpClient; - byte[] buffer; - string loggingEvent; - - try - { - udpClient = new UdpClient(8080); - - while(true) - { - buffer = udpClient.Receive(ref remoteEndPoint); - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); - Console.WriteLine(loggingEvent); - } - } - catch(Exception e) - { - Console.WriteLine(e.ToString()); - } - - - Dim remoteEndPoint as IPEndPoint - Dim udpClient as UdpClient - Dim buffer as Byte() - Dim loggingEvent as String - - Try - remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) - udpClient = new UdpClient(8080) - - While True - buffer = udpClient.Receive(ByRef remoteEndPoint) - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) - Console.WriteLine(loggingEvent) - Wend - Catch e As Exception - Console.WriteLine(e.ToString()) - End Try - - - An example configuration section to log information using this appender to the - IP 224.0.0.1 on port 8080: - - - - - - - - - - Gert Driesen - Nicko Cadell - - - - Initializes a new instance of the class. - - - The default constructor initializes all fields to their default values. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The appender will be ignored if no was specified or - an invalid remote or local TCP port number was specified. - - - The required property was not specified. - The TCP port number assigned to or is less than or greater than . - - - - This method is called by the method. - - The event to log. - - - Sends the event using an UDP datagram. - - - Exceptions are passed to the . - - - - - - Closes the UDP connection and releases all resources associated with - this instance. - - - - Disables the underlying and releases all managed - and unmanaged resources associated with the . - - - - - - Initializes the underlying connection. - - - - The underlying is initialized and binds to the - port number from which you intend to communicate. - - - Exceptions are passed to the . - - - - - - The IP address of the remote host or multicast group to which - the logging event will be sent. - - - - - The TCP port number of the remote host or multicast group to - which the logging event will be sent. - - - - - The cached remote endpoint to which the logging events will be sent. - - - - - The TCP port number from which the will communicate. - - - - - The instance that will be used for sending the - logging events. - - - - - The encoding to use for the packet. - - - - - Gets or sets the IP address of the remote host or multicast group to which - the underlying should sent the logging event. - - - The IP address of the remote host or multicast group to which the logging event - will be sent. - - - - Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to - 239.255.255.255). Multicast packets can pass across different networks through routers, so - it is possible to use multicasts in an Internet scenario as long as your network provider - supports multicasting. - - - Hosts that want to receive particular multicast messages must register their interest by joining - the multicast group. Multicast messages are not sent to networks where no host has joined - the multicast group. Class D IP addresses are used for multicast groups, to differentiate - them from normal host addresses, allowing nodes to easily detect if a message is of interest. - - - Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: - - - - - IP Address - Description - - - 224.0.0.1 - - - Sends a message to all system on the subnet. - - - - - 224.0.0.2 - - - Sends a message to all routers on the subnet. - - - - - 224.0.0.12 - - - The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. - - - - - - - A complete list of actually reserved multicast addresses and their owners in the ranges - defined by RFC 3171 can be found at the IANA web site. - - - The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative - addresses. These addresses can be reused with other local groups. Routers are typically - configured with filters to prevent multicast traffic in this range from flowing outside - of the local network. - - - - - - Gets or sets the TCP port number of the remote host or multicast group to which - the underlying should sent the logging event. - - - An integer value in the range to - indicating the TCP port number of the remote host or multicast group to which the logging event - will be sent. - - - The underlying will send messages to this TCP port number - on the remote host or multicast group. - - The value specified is less than or greater than . - - - - Gets or sets the TCP port number from which the underlying will communicate. - - - An integer value in the range to - indicating the TCP port number from which the underlying will communicate. - - - - The underlying will bind to this port for sending messages. - - - Setting the value to 0 (the default) will cause the udp client not to bind to - a local port. - - - The value specified is less than or greater than . - - - - Gets or sets used to write the packets. - - - The used to write the packets. - - - - The used to write the packets. - - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to send logging events - over a network. Classes deriving from can use this - property to get or set this . Use the underlying - returned from if you require access beyond that which - provides. - - - - - Gets or sets the cached remote endpoint to which the logging events should be sent. - - - The cached remote endpoint to which the logging events will be sent. - - - The method will initialize the remote endpoint - with the values of the and - properties. - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Syslog port 514 - - - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a remote syslog daemon. - - - - - Add a mapping of level to severity - - The mapping to add - - - Add a mapping to this appender. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to syslog severity mappings set on this appender. - - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - Generate a syslog priority. - - - - - - The facility. The default facility is . - - - - - The message identity - - - - - Mapping from level object to syslog severity - - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - - syslog severities - - - - The syslog severities. - - - - - - system is unusable - - - - - action must be taken immediately - - - - - critical conditions - - - - - error conditions - - - - - warning conditions - - - - - normal but significant condition - - - - - informational - - - - - debug-level messages - - - - - syslog facilities - - - - The syslog facilities - - - - - - kernel messages - - - - - random user-level messages - - - - - mail system - - - - - system daemons - - - - - security/authorization messages - - - - - messages generated internally by syslogd - - - - - line printer subsystem - - - - - network news subsystem - - - - - UUCP subsystem - - - - - clock (cron/at) daemon - - - - - security/authorization messages (private) - - - - - ftp daemon - - - - - NTP subsystem - - - - - log audit - - - - - log alert - - - - - clock daemon - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - - Delivers logging events to a remote logging sink. - - - - This Appender is designed to deliver events to a remote sink. - That is any object that implements the - interface. It delivers the events using .NET remoting. The - object to deliver events to is specified by setting the - appenders property. - - The RemotingAppender buffers events before sending them. This allows it to - make more efficient use of the remoting infrastructure. - - Once the buffer is full the events are still not sent immediately. - They are scheduled to be sent using a pool thread. The effect is that - the send occurs asynchronously. This is very important for a - number of non obvious reasons. The remoting infrastructure will - flow thread local variables (stored in the ), - if they are marked as , across the - remoting boundary. If the server is not contactable then - the remoting infrastructure will clear the - objects from the . To prevent a logging failure from - having side effects on the calling application the remoting call must be made - from a separate thread to the one used by the application. A - thread is used for this. If no thread is available then - the events will block in the thread pool manager until a thread is available. - - Because the events are sent asynchronously using pool threads it is possible to close - this appender before all the queued events have been sent. - When closing the appender attempts to wait until all the queued events have been sent, but - this will timeout after 30 seconds regardless. - - If this appender is being closed because the - event has fired it may not be possible to send all the queued events. During process - exit the runtime limits the time that a - event handler is allowed to run for. If the runtime terminates the threads before - the queued events have been sent then they will be lost. To ensure that all events - are sent the appender must be closed before the application exits. See - for details on how to shutdown - log4net programmatically. - - - Nicko Cadell - Gert Driesen - Daniel Cazzulino - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Send the contents of the buffer to the remote sink. - - - The events are not sent immediately. They are scheduled to be sent - using a pool thread. The effect is that the send occurs asynchronously. - This is very important for a number of non obvious reasons. The remoting - infrastructure will flow thread local variables (stored in the ), - if they are marked as , across the - remoting boundary. If the server is not contactable then - the remoting infrastructure will clear the - objects from the . To prevent a logging failure from - having side effects on the calling application the remoting call must be made - from a separate thread to the one used by the application. A - thread is used for this. If no thread is available then - the events will block in the thread pool manager until a thread is available. - - The events to send. - - - - Override base class close. - - - - This method waits while there are queued work items. The events are - sent asynchronously using work items. These items - will be sent once a thread pool thread is available to send them, therefore - it is possible to close the appender before all the queued events have been - sent. - - This method attempts to wait until all the queued events have been sent, but this - method will timeout after 30 seconds regardless. - - If the appender is being closed because the - event has fired it may not be possible to send all the queued events. During process - exit the runtime limits the time that a - event handler is allowed to run for. - - - - - A work item is being queued into the thread pool - - - - - A work item from the thread pool has completed - - - - - Send the contents of the buffer to the remote sink. - - - This method is designed to be used with the . - This method expects to be passed an array of - objects in the state param. - - the logging events to send - - - - The URL of the remote sink. - - - - - The local proxy (.NET remoting) for the remote logging sink. - - - - - The number of queued callbacks currently waiting or executing - - - - - Event used to signal when there are no queued work items - - - This event is set when there are no queued work items. In this - state it is safe to close the appender. - - - - - Gets or sets the URL of the well-known object that will accept - the logging events. - - - The well-known URL of the remote sink. - - - - The URL of the remoting sink that will accept logging events. - The sink must implement the - interface. - - - - - - Interface used to deliver objects to a remote sink. - - - This interface must be implemented by a remoting sink - if the is to be used - to deliver logging events to the sink. - - - - - Delivers logging events to the remote sink - - Array of events to log. - - - Delivers logging events to the remote sink - - - - - - Appender that rolls log files based on size or date or both. - - - - RollingFileAppender can roll log files based on size or date or both - depending on the setting of the property. - When set to the log file will be rolled - once its size exceeds the . - When set to the log file will be rolled - once the date boundary specified in the property - is crossed. - When set to the log file will be - rolled once the date boundary specified in the property - is crossed, but within a date boundary the file will also be rolled - once its size exceeds the . - When set to the log file will be rolled when - the appender is configured. This effectively means that the log file can be - rolled once per program execution. - - - A of few additional optional features have been added: - - Attach date pattern for current log file - Backup number increments for newer files - Infinite number of backups by file size - - - - - - For large or infinite numbers of backup files a - greater than zero is highly recommended, otherwise all the backup files need - to be renamed each time a new backup is created. - - - When Date/Time based rolling is used setting - to will reduce the number of file renamings to few or none. - - - - - - Changing or without clearing - the log file directory of backup files will cause unexpected and unwanted side effects. - - - - - If Date/Time based rolling is enabled this appender will attempt to roll existing files - in the directory without a Date/Time tag based on the last write date of the base log file. - The appender only rolls the log file when a message is logged. If Date/Time based rolling - is enabled then the appender will not roll the log file at the Date/Time boundary but - at the point when the next message is logged after the boundary has been crossed. - - - - The extends the and - has the same behavior when opening the log file. - The appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - When rolling a backup file necessitates deleting an older backup file the - file to be deleted is moved to a temporary name before being deleted. - - - - - A maximum number of backup files when rolling on date/time boundaries is not supported. - - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - Edward Smit - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Sets the quiet writer being used. - - - This method can be overridden by sub classes. - - the writer to set - - - - Write out a logging event. - - the event to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Write out an array of logging events. - - the events to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Performs any required rolling before outputting the next event - - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Creates and opens the file for logging. If - is false then the fully qualified name is determined and used. - - the name of the file to open - true to append to existing file - - This method will ensure that the directory structure - for the specified exists. - - - - - Get the current output file name - - the base file name - the output file name - - The output file name is based on the base fileName specified. - If is set then the output - file name is the same as the base file passed in. Otherwise - the output file depends on the date pattern, on the count - direction or both. - - - - - Determines curSizeRollBackups (only within the current roll point) - - - - - Generates a wildcard pattern that can be used to find all files - that are similar to the base file name. - - - - - - - Builds a list of filenames for all files matching the base filename plus a file - pattern. - - - - - - - Initiates a roll over if needed for crossing a date boundary since the last run. - - - - - Initializes based on existing conditions at time of . - - - - Initializes based on existing conditions at time of . - The following is done - - determine curSizeRollBackups (only within the current roll point) - initiates a roll over if needed for crossing a date boundary since the last run. - - - - - - - Does the work of bumping the 'current' file counter higher - to the highest count when an incremental file name is seen. - The highest count is either the first file (when count direction - is greater than 0) or the last file (when count direction less than 0). - In either case, we want to know the highest count that is present. - - - - - - - Takes a list of files and a base file name, and looks for - 'incremented' versions of the base file. Bumps the max - count up to the highest count seen. - - - - - - - Calculates the RollPoint for the datePattern supplied. - - the date pattern to calculate the check period for - The RollPoint that is most accurate for the date pattern supplied - - Essentially the date pattern is examined to determine what the - most suitable roll point is. The roll point chosen is the roll point - with the smallest period that can be detected using the date pattern - supplied. i.e. if the date pattern only outputs the year, month, day - and hour then the smallest roll point that can be detected would be - and hourly roll point as minutes could not be detected. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Sets initial conditions including date/time roll over information, first check, - scheduledFilename, and calls to initialize - the current number of backups. - - - - - - Rollover the file(s) to date/time tagged file(s). - - set to true if the file to be rolled is currently open - - - Rollover the file(s) to date/time tagged file(s). - Resets curSizeRollBackups. - If fileIsOpen is set then the new file is opened (through SafeOpenFile). - - - - - - Renames file to file . - - Name of existing file to roll. - New name for file. - - - Renames file to file . It - also checks for existence of target file and deletes if it does. - - - - - - Test if a file exists at a specified path - - the path to the file - true if the file exists - - - Test if a file exists at a specified path - - - - - - Deletes the specified file if it exists. - - The file to delete. - - - Delete a file if is exists. - The file is first moved to a new filename then deleted. - This allows the file to be removed even when it cannot - be deleted, but it still can be moved. - - - - - - Implements file roll base on file size. - - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. Moreover, File is - renamed File.1 and closed. - - - A new file is created to receive further log output. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - - - - Implements file roll. - - the base name to rename - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - This is called by to rename the files. - - - - - - Get the start time of the next window for the current rollpoint - - the current date - the type of roll point we are working with - the start time for the next roll point an interval after the currentDateTime date - - - Returns the date of the next roll point after the currentDateTime date passed to the method. - - - The basic strategy is to subtract the time parts that are less significant - than the rollpoint from the current time. This should roll the time back to - the start of the time window for the current rollpoint. Then we add 1 window - worth of time and get the start time of the next window for the rollpoint. - - - - - - This object supplies the current date/time. Allows test code to plug in - a method to control this class when testing date/time based rolling. - - - - - The date pattern. By default, the pattern is set to ".yyyy-MM-dd" - meaning daily rollover. - - - - - The actual formatted filename that is currently being written to - or will be the file transferred to on roll over - (based on staticLogFileName). - - - - - The timestamp when we shall next recompute the filename. - - - - - Holds date of last roll over - - - - - The type of rolling done - - - - - The default maximum file size is 10MB - - - - - There is zero backup files by default - - - - - How many sized based backups have been made so far - - - - - The rolling file count direction. - - - - - The rolling mode used in this appender. - - - - - Cache flag set if we are rolling by date. - - - - - Cache flag set if we are rolling by size. - - - - - Value indicating whether to always log to the same file. - - - - - FileName provided in configuration. Used for rolling properly - - - - - The 1st of January 1970 in UTC - - - - - Gets or sets the date pattern to be used for generating file names - when rolling over on date. - - - The date pattern to be used for generating file names when rolling - over on date. - - - - Takes a string in the same format as expected by - . - - - This property determines the rollover schedule when rolling over - on date. - - - - - - Gets or sets the maximum number of backup files that are kept before - the oldest is erased. - - - The maximum number of backup files that are kept before the oldest is - erased. - - - - If set to zero, then there will be no backup files and the log file - will be truncated when it reaches . - - - If a negative number is supplied then no deletions will be made. Note - that this could result in very slow performance as a large number of - files are rolled over unless is used. - - - The maximum applies to each time based group of files and - not the total. - - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size in bytes that the output file is allowed to reach before being - rolled over to backup files. - - - - This property is equivalent to except - that it is required for differentiating the setter taking a - argument from the setter taking a - argument. - - - The default maximum file size is 10MB (10*1024*1024). - - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size that the output file is allowed to reach before being - rolled over to backup files. - - - - This property allows you to specify the maximum size with the - suffixes "KB", "MB" or "GB" so that the size is interpreted being - expressed respectively in kilobytes, megabytes or gigabytes. - - - For example, the value "10KB" will be interpreted as 10240 bytes. - - - The default maximum file size is 10MB. - - - If you have the option to set the maximum file size programmatically - consider using the property instead as this - allows you to set the size in bytes as a . - - - - - - Gets or sets the rolling file count direction. - - - The rolling file count direction. - - - - Indicates if the current file is the lowest numbered file or the - highest numbered file. - - - By default newer files have lower numbers ( < 0), - i.e. log.1 is most recent, log.5 is the 5th backup, etc... - - - >= 0 does the opposite i.e. - log.1 is the first backup made, log.5 is the 5th backup made, etc. - For infinite backups use >= 0 to reduce - rollover costs. - - The default file count direction is -1. - - - - - Gets or sets the rolling style. - - The rolling style. - - - The default rolling style is . - - - When set to this appender's - property is set to false, otherwise - the appender would append to a single file rather than rolling - the file each time it is opened. - - - - - - Gets or sets a value indicating whether to always log to - the same file. - - - true if always should be logged to the same file, otherwise false. - - - - By default file.log is always the current file. Optionally - file.log.yyyy-mm-dd for current formatted datePattern can by the currently - logging file (or file.log.curSizeRollBackup or even - file.log.yyyy-mm-dd.curSizeRollBackup). - - - This will make time based rollovers with a large number of backups - much faster as the appender it won't have to rename all the backups! - - - - - - Style of rolling to use - - - - Style of rolling to use - - - - - - Roll files once per program execution - - - - Roll files once per program execution. - Well really once each time this appender is - configured. - - - Setting this option also sets AppendToFile to - false on the RollingFileAppender, otherwise - this appender would just be a normal file appender. - - - - - - Roll files based only on the size of the file - - - - - Roll files based only on the date - - - - - Roll files based on both the size and date of the file - - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - - - Roll the log not based on the date - - - - - Roll the log for each minute - - - - - Roll the log for each hour - - - - - Roll the log twice a day (midday and midnight) - - - - - Roll the log each day (midnight) - - - - - Roll the log each week - - - - - Roll the log each month - - - - - This interface is used to supply Date/Time information to the . - - - This interface is used to supply Date/Time information to the . - Used primarily to allow test classes to plug themselves in so they can - supply test date/times. - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Default implementation of that returns the current time. - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Send an e-mail when a specific logging event occurs, typically on errors - or fatal errors. - - - - The number of logging events delivered in this e-mail depend on - the value of option. The - keeps only the last - logging events in its - cyclic buffer. This keeps memory requirements at a reasonable level while - still delivering useful application context. - - - Authentication and setting the server Port are only available on the MS .NET 1.1 runtime. - For these features to be enabled you need to ensure that you are using a version of - the log4net assembly that is built against the MS .NET 1.1 framework and that you are - running the your application on the MS .NET 1.1 runtime. On all other platforms only sending - unauthenticated messages to a server listening on port 25 (the default) is supported. - - - Authentication is supported by setting the property to - either or . - If using authentication then the - and properties must also be set. - - - To set the SMTP server port use the property. The default port is 25. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Default constructor - - - - - - Sends the contents of the cyclic buffer as an e-mail message. - - The logging events to send. - - - - Send the email message - - the body text to include in the mail - - - - Gets or sets a semicolon-delimited list of recipient e-mail addresses. - - - A semicolon-delimited list of e-mail addresses. - - - - A semicolon-delimited list of recipient e-mail addresses. - - - - - - Gets or sets the e-mail address of the sender. - - - The e-mail address of the sender. - - - - The e-mail address of the sender. - - - - - - Gets or sets the subject line of the e-mail message. - - - The subject line of the e-mail message. - - - - The subject line of the e-mail message. - - - - - - Gets or sets the name of the SMTP relay mail server to use to send - the e-mail messages. - - - The name of the e-mail relay server. If SmtpServer is not set, the - name of the local SMTP server is used. - - - - The name of the e-mail relay server. If SmtpServer is not set, the - name of the local SMTP server is used. - - - - - - Obsolete - - - Use the BufferingAppenderSkeleton Fix methods instead - - - - Obsolete property. - - - - - - The mode to use to authentication with the SMTP server - - - Authentication is only available on the MS .NET 1.1 runtime. - - Valid Authentication mode values are: , - , and . - The default value is . When using - you must specify the - and to use to authenticate. - When using the Windows credentials for the current - thread, if impersonating, or the process will be used to authenticate. - - - - - - The username to use to authenticate with the SMTP server - - - Authentication is only available on the MS .NET 1.1 runtime. - - A and must be specified when - is set to , - otherwise the username will be ignored. - - - - - - The password to use to authenticate with the SMTP server - - - Authentication is only available on the MS .NET 1.1 runtime. - - A and must be specified when - is set to , - otherwise the password will be ignored. - - - - - - The port on which the SMTP server is listening - - - Server Port is only available on the MS .NET 1.1 runtime. - - The port on which the SMTP server is listening. The default - port is 25. The Port can only be changed when running on - the MS .NET 1.1 runtime. - - - - - - Gets or sets the priority of the e-mail message - - - One of the values. - - - - Sets the priority of the e-mails generated by this - appender. The default priority is . - - - If you are using this appender to report errors then - you may want to set the priority to . - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Values for the property. - - - - SMTP authentication modes. - - - - - - No authentication - - - - - Basic authentication. - - - Requires a username and password to be supplied - - - - - Integrated authentication - - - Uses the Windows credentials from the current thread or process to authenticate. - - - - - Send an email when a specific logging event occurs, typically on errors - or fatal errors. Rather than sending via smtp it writes a file into the - directory specified by . This allows services such - as the IIS SMTP agent to manage sending the messages. - - - - The configuration for this appender is identical to that of the SMTPAppender, - except that instead of specifying the SMTPAppender.SMTPHost you specify - . - - - The number of logging events delivered in this e-mail depend on - the value of option. The - keeps only the last - logging events in its - cyclic buffer. This keeps memory requirements at a reasonable level while - still delivering useful application context. - - - Niall Daley - Nicko Cadell - - - - Default constructor - - - - Default constructor - - - - - - Sends the contents of the cyclic buffer as an e-mail message. - - The logging events to send. - - - Sends the contents of the cyclic buffer as an e-mail message. - - - - - - Activate the options on this appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - - The security context to use for privileged calls - - - - - Gets or sets a semicolon-delimited list of recipient e-mail addresses. - - - A semicolon-delimited list of e-mail addresses. - - - - A semicolon-delimited list of e-mail addresses. - - - - - - Gets or sets the e-mail address of the sender. - - - The e-mail address of the sender. - - - - The e-mail address of the sender. - - - - - - Gets or sets the subject line of the e-mail message. - - - The subject line of the e-mail message. - - - - The subject line of the e-mail message. - - - - - - Gets or sets the path to write the messages to. - - - - Gets or sets the path to write the messages to. This should be the same - as that used by the agent sending the messages. - - - - - - Gets or sets the used to write to the pickup directory. - - - The used to write to the pickup directory. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appender that allows clients to connect via Telnet to receive log messages - - - - The TelnetAppender accepts socket connections and streams logging messages - back to the client. - The output is provided in a telnet-friendly way so that a log can be monitored - over a TCP/IP socket. - This allows simple remote monitoring of application logging. - - - The default is 23 (the telnet port). - - - Keith Long - Nicko Cadell - - - - Default constructor - - - - Default constructor - - - - - - Overrides the parent method to close the socket handler - - - - Closes all the outstanding connections. - - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Create the socket handler and wait for connections - - - - - - Writes the logging event to each connected client. - - The event to log. - - - Writes the logging event to each connected client. - - - - - - Gets or sets the TCP port number on which this will listen for connections. - - - An integer value in the range to - indicating the TCP port number on which this will listen for connections. - - - - The default value is 23 (the telnet port). - - - The value specified is less than - or greater than . - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Helper class to manage connected clients - - - - The SocketHandler class is used to accept connections from - clients. It is threaded so that clients can connect/disconnect - asynchronously. - - - - - - Opens a new server port on - - the local port to listen on for connections - - - Creates a socket handler on the specified local server port. - - - - - - Sends a string message to each of the connected clients - - the text to send - - - Sends a string message to each of the connected clients - - - - - - Add a client to the internal clients list - - client to add - - - - Remove a client from the internal clients list - - client to remove - - - - Callback used to accept a connection on the server socket - - The result of the asynchronous operation - - - On connection adds to the list of connections - if there are two many open connections you will be disconnected - - - - - - Close all network connections - - - - Make sure we close all network connections - - - - - - Test if this handler has active connections - - - true if this handler has active connections - - - - This property will be true while this handler has - active connections, that is at least one connection that - the handler will attempt to send a message to. - - - - - - Class that represents a client connected to this handler - - - - Class that represents a client connected to this handler - - - - - - Create this for the specified - - the client's socket - - - Opens a stream writer on the socket. - - - - - - Write a string to the client - - string to send - - - Write a string to the client - - - - - - Cleanup the clients connection - - - - Close the socket connection. - - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - trace system. - - - Events are written using the System.Diagnostics.Trace.Write(string,string) - method. The event's logger name is passed as the value for the category name to the Write method. - - - Compact Framework
- The Compact Framework does not support the - class for any operation except Assert. When using the Compact Framework this - appender will write to the system rather than - the Trace system. This appender will therefore behave like the . -
-
- Douglas de la Torre - Nicko Cadell - Gert Driesen -
- - - Initializes a new instance of the . - - - - Default constructor. - - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Assembly level attribute that specifies a domain to alias to this assembly's repository. - - - - AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - - - An assembly's logger repository is defined by its , - however this can be overridden by an assembly loaded before the target assembly. - - - An assembly can alias another assembly's domain to its repository by - specifying this attribute with the name of the target domain. - - - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required domains. - - - Nicko Cadell - Gert Driesen - - - - Assembly level attribute that specifies a repository to alias to this assembly's repository. - - - - An assembly's logger repository is defined by its , - however this can be overridden by an assembly loaded before the target assembly. - - - An assembly can alias another assembly's repository to its repository by - specifying this attribute with the name of the target repository. - - - This attribute can only be specified on the assembly and may be used - as many times as necessary to alias all the required repositories. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class with - the specified repository to alias to this assembly's repository. - - The repository to alias to this assemby's repository. - - - Initializes a new instance of the class with - the specified repository to alias to this assembly's repository. - - - - - - Gets or sets the repository to alias to this assemby's repository. - - - The repository to alias to this assemby's repository. - - - - The name of the repository to alias to this assemby's repository. - - - - - - Initializes a new instance of the class with - the specified domain to alias to this assembly's repository. - - The domain to alias to this assemby's repository. - - - Obsolete. Use instead of . - - - - - - Use this class to quickly configure a . - - - - Allows very simple programmatic configuration of log4net. - - - Only one appender can be configured using this configurator. - The appender is set at the root of the hierarchy and all logging - events will be delivered to that appender. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Initializes the log4net system with a default configuration. - - - - Initializes the log4net logging system using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - - Initializes the log4net system using the specified appender. - - The appender to use to log all logging events. - - - Initializes the log4net system using the specified appender. - - - - - - Initializes the with a default configuration. - - The repository to configure. - - - Initializes the specified repository using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - - Initializes the using the specified appender. - - The repository to configure. - The appender to use to log all logging events. - - - Initializes the using the specified appender. - - - - - - Base class for all log4net configuration attributes. - - - This is an abstract class that must be extended by - specific configurators. This attribute allows the - configurator to be parameterized by an assembly level - attribute. - - Nicko Cadell - Gert Driesen - - - - Constructor used by subclasses. - - the ordering priority for this configurator - - - The is used to order the configurator - attributes before they are invoked. Higher priority configurators are executed - before lower priority ones. - - - - - - Configures the for the specified assembly. - - The assembly that this attribute was defined on. - The repository to configure. - - - Abstract method implemented by a subclass. When this method is called - the subclass should configure the . - - - - - - Compare this instance to another ConfiguratorAttribute - - the object to compare to - see - - - Compares the priorities of the two instances. - Sorts by priority in descending order. Objects with the same priority are - randomly ordered. - - - - - - Assembly level attribute that specifies the logging domain for the assembly. - - - - DomainAttribute is obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - Assemblies are mapped to logging domains. Each domain has its own - logging repository. This attribute specified on the assembly controls - the configuration of the domain. The property specifies the name - of the domain that this assembly is a part of. The - specifies the type of the repository objects to create for the domain. If - this attribute is not specified and a is not specified - then the assembly will be part of the default shared logging domain. - - - This attribute can only be specified on the assembly and may only be used - once per assembly. - - - Nicko Cadell - Gert Driesen - - - - Assembly level attribute that specifies the logging repository for the assembly. - - - - Assemblies are mapped to logging repository. This attribute specified - on the assembly controls - the configuration of the repository. The property specifies the name - of the repository that this assembly is a part of. The - specifies the type of the object - to create for the assembly. If this attribute is not specified or a - is not specified then the assembly will be part of the default shared logging repository. - - - This attribute can only be specified on the assembly and may only be used - once per assembly. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initialize a new instance of the class - with the name of the repository. - - The name of the repository. - - - Initialize the attribute with the name for the assembly's repository. - - - - - - Gets or sets the name of the logging repository. - - - The string name to use as the name of the repository associated with this - assembly. - - - - This value does not have to be unique. Several assemblies can share the - same repository. They will share the logging configuration of the repository. - - - - - - Gets or sets the type of repository to create for this assembly. - - - The type of repository to create for this assembly. - - - - The type of the repository to create for the assembly. - The type must implement the - interface. - - - This will be the type of repository created when - the repository is created. If multiple assemblies reference the - same repository then the repository is only created once using the - of the first assembly to call into the - repository. - - - - - - Initializes a new instance of the class. - - - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - - - - Initialize a new instance of the class - with the name of the domain. - - The name of the domain. - - - Obsolete. Use RepositoryAttribute instead of DomainAttribute. - - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - The repository to configure. - - - - Configures log4net using a log4net element - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The element to parse. - - - - Configures the using the specified XML - element. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures log4net using the specified configuration file. - - A stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Assembly level attribute to configure the . - - - - AliasDomainAttribute is obsolete. Use AliasRepositoryAttribute instead of AliasDomainAttribute. - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - Nicko Cadell - Gert Driesen - - - - Assembly level attribute to configure the . - - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - If neither of the or - properties are set the configuration is loaded from the application's .config file. - If set the property takes priority over the - property. The property - specifies a path to a file to load the config from. The path is relative to the - application's base directory; . - The property is used as a postfix to the assembly file name. - The config file must be located in the application's base directory; . - For example in a console application setting the to - config has the same effect as not specifying the or - properties. - - - The property can be set to cause the - to watch the configuration file for changes. - - - - Log4net will only look for assembly level configuration attributes once. - When using the log4net assembly level attributes to control the configuration - of log4net you must ensure that the first call to any of the - methods is made from the assembly with the configuration - attributes. - - - If you cannot guarantee the order in which log4net calls will be made from - different assemblies you must use programmatic configuration instead, i.e. - call the method directly. - - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Default constructor - - - - - - Configures the for the specified assembly. - - The assembly that this attribute was defined on. - The repository to configure. - - - Configure the repository using the . - The specified must extend the - class otherwise the will not be able to - configure it. - - - The does not extend . - - - - Attempt to load configuration from the local file system - - The assembly that this attribute was defined on. - The repository to configure. - - - - Configure the specified repository using a - - The repository to configure. - the FileInfo pointing to the config file - - - - Attempt to load configuration from a URI - - The assembly that this attribute was defined on. - The repository to configure. - - - - Gets or sets the filename of the configuration file. - - - The filename of the configuration file. - - - - If specified, this is the name of the configuration file to use with - the . This file path is relative to the - application base directory (). - - - The takes priority over the . - - - - - - Gets or sets the extension of the configuration file. - - - The extension of the configuration file. - - - - If specified this is the extension for the configuration file. - The path to the config file is built by using the application - base directory (), - the assembly file name and the config file extension. - - - If the is set to MyExt then - possible config file names would be: MyConsoleApp.exe.MyExt or - MyClassLibrary.dll.MyExt. - - - The takes priority over the . - - - - - - Gets or sets a value indicating whether to watch the configuration file. - - - true if the configuration should be watched, false otherwise. - - - - If this flag is specified and set to true then the framework - will watch the configuration file and will reload the config each time - the file is modified. - - - The config file can only be watched if it is loaded from local disk. - In a No-Touch (Smart Client) deployment where the application is downloaded - from a web server the config file may not reside on the local disk - and therefore it may not be able to watch it. - - - Watching configuration is not supported on the SSCLI. - - - - - - Class to register for the log4net section of the configuration file - - - The log4net section of the configuration file needs to have a section - handler registered. This is the section handler used. It simply returns - the XML element that is the root of the section. - - - Example of registering the log4net section handler : - - - -
- - - log4net configuration XML goes here - - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Parses the configuration section. - - The configuration settings in a corresponding parent configuration section. - The configuration context when called from the ASP.NET configuration system. Otherwise, this parameter is reserved and is a null reference. - The for the log4net section. - The for the log4net section. - - - Returns the containing the configuration data, - - - - - - Assembly level attribute that specifies a plugin to attach to - the repository. - - - - Specifies the type of a plugin to create and attach to the - assembly's repository. The plugin type must implement the - interface. - - - Nicko Cadell - Gert Driesen - - - - Interface used to create plugins. - - - - Interface used to create a plugin. - - - Nicko Cadell - Gert Driesen - - - - Creates the plugin object. - - the new plugin instance - - - Create and return a new plugin instance. - - - - - - Initializes a new instance of the class - with the specified type. - - The type name of plugin to create. - - - Create the attribute with the plugin type specified. - - - Where possible use the constructor that takes a . - - - - - - Initializes a new instance of the class - with the specified type. - - The type of plugin to create. - - - Create the attribute with the plugin type specified. - - - - - - Creates the plugin object defined by this attribute. - - - - Creates the instance of the object as - specified by this attribute. - - - The plugin object. - - - - Returns a representation of the properties of this object. - - - - Overrides base class method to - return a representation of the properties of this object. - - - A representation of the properties of this object - - - - Gets or sets the type for the plugin. - - - The type for the plugin. - - - - The type for the plugin. - - - - - - Gets or sets the type name for the plugin. - - - The type name for the plugin. - - - - The type name for the plugin. - - - Where possible use the property instead. - - - - - - Assembly level attribute to configure the . - - - - This attribute may only be used at the assembly scope and can only - be used once per assembly. - - - Use this attribute to configure the - without calling one of the - methods. - - - Nicko Cadell - - - - Construct provider attribute with type specified - - the type of the provider to use - - - The provider specified must subclass the - class. - - - - - - Configures the SecurityContextProvider - - The assembly that this attribute was defined on. - The repository to configure. - - - Creates a provider instance from the specified. - Sets this as the default security context provider . - - - - - - Gets or sets the type of the provider to use. - - - the type of the provider to use. - - - - The provider specified must subclass the - class. - - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - To use this method to configure log4net you must specify - the section - handler for the log4net configuration section. See the - for an example. - - - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - To use this method to configure log4net you must specify - the section - handler for the log4net configuration section. See the - for an example. - - - The repository to configure. - - - - Configures log4net using a log4net element - - - - Loads the log4net configuration from the XML element - supplied as . - - - The element to parse. - - - - Configures the using the specified XML - element. - - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The first element matching <configuration> will be read as the - configuration. If this file is also a .NET .config file then you must specify - a configuration section for the log4net element otherwise .NET will - complain. Set the type for the section handler to , for example: - - -
- - - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures log4net using the specified configuration URI. - - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The must support the URI scheme specified. - - - - - - Configures log4net using the specified configuration data stream. - - A stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The first element matching <configuration> will be read as the - configuration. If this file is also a .NET .config file then you must specify - a configuration section for the log4net element otherwise .NET will - complain. Set the type for the section handler to , for example: - - -
- - - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures the using the specified configuration - URI. - - The repository to configure. - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The must support the URI scheme specified. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures log4net using the file specified, monitors the file for changes - and reloads the configuration if a change is detected. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Configures the using the file specified, - monitors the file for changes and reloads the configuration if a change - is detected. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The configuration file will be monitored using a - and depends on the behavior of that class. - - - For more information on how to configure log4net using - a separate configuration file, see . - - - - - - - Configures the specified repository using a log4net element. - - The hierarchy to configure. - The element to parse. - - - Loads the log4net configuration from the XML element - supplied as . - - - This method is ultimately called by one of the Configure methods - to load the configuration from an . - - - - - - Class used to watch config files. - - - - Uses the to monitor - changes to a specified file. Because multiple change notifications - may be raised when the file is modified, a timer is used to - compress the notifications into a single event. The timer - waits for time before delivering - the event notification. If any further - change notifications arrive while the timer is waiting it - is reset and waits again for to - elapse. - - - - - - The default amount of time to wait after receiving notification - before reloading the config file. - - - - - Watch a specified config file used to configure a repository - - The repository to configure. - The configuration file to watch. - - - Watch a specified config file used to configure a repository - - - - - - Holds the FileInfo used to configure the XmlConfigurator - - - - - Holds the repository being configured. - - - - - The timer used to compress the notification events. - - - - - Initializes a new instance of the class. - - The repository to configure. - The configuration file to watch. - - - Initializes a new instance of the class. - - - - - - Event handler used by . - - The firing the event. - The argument indicates the file that caused the event to be fired. - - - This handler reloads the configuration from the file when the event is fired. - - - - - - Event handler used by . - - The firing the event. - The argument indicates the file that caused the event to be fired. - - - This handler reloads the configuration from the file when the event is fired. - - - - - - Called by the timer when the configuration has been updated. - - null - - - - The implementation of the interface suitable - for use with the compact framework - - - - This implementation is a simple - mapping between repository name and - object. - - - The .NET Compact Framework 1.0 does not support retrieving assembly - level attributes therefore unlike the DefaultRepositorySelector - this selector does not examine the calling assembly for attributes. - - - Nicko Cadell - - - - Interface used by the to select the . - - - - The uses a - to specify the policy for selecting the correct - to return to the caller. - - - Nicko Cadell - Gert Driesen - - - - Gets the for the specified assembly. - - The assembly to use to lookup to the - The for the assembly. - - - Gets the for the specified assembly. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. The results of this method must be repeatable, i.e. - when called again with the same arguments the result must be the - save value. - - - - - - Gets the named . - - The name to use to lookup to the . - The named - - Lookup a named . This is the repository created by - calling . - - - - - Creates a new repository for the assembly specified. - - The assembly to use to create the domain to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the domain - specified such that a call to with the - same assembly specified will return the same repository instance. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. - - - - - - Creates a new repository with the name specified. - - The name to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the name - specified such that a call to with the - same name will return the same repository instance. - - - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets an array of all currently defined repositories. - - - An array of the instances created by - this . - - - Gets an array of all of the repositories created by this selector. - - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - Create a new repository selector - - the type of the repositories to create, must implement - - - Create an new compact repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - throw if is null - throw if does not implement - - - - Get the for the specified assembly - - not used - The default - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - - Get the named - - the name of the repository to lookup - The named - - - Get the named . The default - repository is log4net-default-repository. Other repositories - must be created using the . - If the named repository does not exist an exception is thrown. - - - throw if is null - throw if the does not exist - - - - Create a new repository for the assembly specified - - not used - the type of repository to create, must implement - the repository created - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - If the is null then the - default repository type specified to the constructor is used. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - - Create a new repository for the repository specified - - the repository to associate with the - the type of repository to create, must implement . - If this param is null then the default repository type is used. - the repository created - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - If the named repository already exists an exception will be thrown. - - - If is null then the default - repository type specified to the constructor is used. - - - throw if is null - throw if the already exists - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - - Notify the registered listeners that the repository has been created - - The repository that has been created - - - Raises the LoggerRepositoryCreatedEvent - event. - - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - The default implementation of the interface. - - - - Uses attributes defined on the calling assembly to determine how to - configure the hierarchy for the repository. - - - Nicko Cadell - Gert Driesen - - - - Creates a new repository selector. - - The type of the repositories to create, must implement - - - Create an new repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - is . - does not implement . - - - - Gets the for the specified assembly. - - The assembly use to lookup the . - - - The type of the created and the repository - to create can be overridden by specifying the - attribute on the . - - - The default values are to use the - implementation of the interface and to use the - as the name of the repository. - - - The created will be automatically configured using - any attributes defined on - the . - - - The for the assembly - is . - - - - Gets the for the specified repository. - - The repository to use to lookup the . - The for the specified repository. - - - Returns the named repository. If is null - a is thrown. If the repository - does not exist a is thrown. - - - Use to create a repository. - - - is . - does not exist. - - - - Create a new repository for the assembly specified - - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The type of the created and - the repository to create can be overridden by specifying the - attribute on the - . The default values are to use the - implementation of the - interface and to use the - as the name of the repository. - - - The created will be automatically - configured using any - attributes defined on the . - - - If a repository for the already exists - that repository will be returned. An error will not be raised and that - repository may be of a different type to that specified in . - Also the attribute on the - assembly may be used to override the repository type specified in - . - - - is . - - - - Creates a new repository for the assembly specified. - - the assembly to use to create the repository to associate with the . - The type of repository to create, must implement . - The name to assign to the created repository - Set to true to read and apply the assembly attributes - The repository created. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The type of the created and - the repository to create can be overridden by specifying the - attribute on the - . The default values are to use the - implementation of the - interface and to use the - as the name of the repository. - - - The created will be automatically - configured using any - attributes defined on the . - - - If a repository for the already exists - that repository will be returned. An error will not be raised and that - repository may be of a different type to that specified in . - Also the attribute on the - assembly may be used to override the repository type specified in - . - - - is . - - - - Creates a new repository for the specified repository. - - The repository to associate with the . - The type of repository to create, must implement . - If this param is then the default repository type is used. - The new repository. - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - is . - already exists. - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - - Aliases a repository to an existing repository. - - The repository to alias. - The repository that the repository is aliased to. - - - The repository specified will be aliased to the repository when created. - The repository must not already exist. - - - When the repository is created it must utilize the same repository type as - the repository it is aliased to, otherwise the aliasing will fail. - - - - is . - -or- - is . - - - - - Notifies the registered listeners that the repository has been created. - - The repository that has been created. - - - Raises the event. - - - - - - Gets the repository name and repository type for the specified assembly. - - The assembly that has a . - in/out param to hold the repository name to use for the assembly, caller should set this to the default value before calling. - in/out param to hold the type of the repository to create for the assembly, caller should set this to the default value before calling. - is . - - - - Configures the repository using information from the assembly. - - The assembly containing - attributes which define the configuration for the repository. - The repository to configure. - - is . - -or- - is . - - - - - Loads the attribute defined plugins on the assembly. - - The assembly that contains the attributes. - The repository to add the plugins to. - - is . - -or- - is . - - - - - Loads the attribute defined aliases on the assembly. - - The assembly that contains the attributes. - The repository to alias to. - - is . - -or- - is . - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - Defined error codes that can be passed to the method. - - - - Values passed to the method. - - - Nicko Cadell - - - - A general error - - - - - Error while writing output - - - - - Failed to flush file - - - - - Failed to close file - - - - - Unable to open output file - - - - - No layout specified - - - - - Failed to parse address - - - - - Appenders may delegate their error handling to an . - - - - Error handling is a particularly tedious to get right because by - definition errors are hard to predict and to reproduce. - - - Nicko Cadell - Gert Driesen - - - - Handles the error and information about the error condition is passed as - a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - The error code associated with the error. - - - Handles the error and information about the error condition is passed as - a parameter. - - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - - - See . - - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - - - See . - - - - - - Interface for objects that require fixing. - - - - Interface that indicates that the object requires fixing before it - can be taken outside the context of the appender's - method. - - - When objects that implement this interface are stored - in the context properties maps - and - are fixed - (see ) the - method will be called. - - - Nicko Cadell - - - - Get a portable version of this object - - the portable instance of this object - - - Get a portable instance object that represents the current - state of this object. The portable object can be stored - and logged from any thread with identical results. - - - - - - Interface that all loggers implement - - - - This interface supports logging events and testing if a level - is enabled for logging. - - - These methods will not throw exceptions. Note to implementor, ensure - that the implementation of these methods cannot allow an exception - to be thrown to the caller. - - - Nicko Cadell - Gert Driesen - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - the exception to log, including its stack trace. Pass null to not log an exception. - - - Generates a logging event for the specified using - the and . - - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - - - - Gets the name of the logger. - - - The name of the logger. - - - - The name of this logger - - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - - Base interface for all wrappers - - - - Base interface for all wrappers. - - - All wrappers must implement this interface. - - - Nicko Cadell - - - - Get the implementation behind this wrapper object. - - - The object that in implementing this object. - - - - The object that in implementing this - object. The Logger object may not - be the same object as this object because of logger decorators. - This gets the actual underlying objects that is used to process - the log events. - - - - - - Delegate used to handle logger repository creation event notifications - - The which created the repository. - The event args - that holds the instance that has been created. - - - Delegate used to handle logger repository creation event notifications. - - - - - - Provides data for the event. - - - - A - event is raised every time a is created. - - - - - - The created - - - - - Construct instance using specified - - the that has been created - - - Construct instance using specified - - - - - - The that has been created - - - The that has been created - - - - The that has been created - - - - - - Test if an triggers an action - - - - Implementations of this interface allow certain appenders to decide - when to perform an appender specific action. - - - The action or behavior triggered is defined by the implementation. - - - Nicko Cadell - - - - Test if this event triggers the action - - The event to check - true if this event triggers the action, otherwise false - - - Return true if this event triggers the action - - - - - - Defines the default set of levels recognized by the system. - - - - Each has an associated . - - - Levels have a numeric that defines the relative - ordering between levels. Two Levels with the same - are deemed to be equivalent. - - - The levels that are recognized by log4net are set for each - and each repository can have different levels defined. The levels are stored - in the on the repository. Levels are - looked up by name from the . - - - When logging at level INFO the actual level used is not but - the value of LoggerRepository.LevelMap["INFO"]. The default value for this is - , but this can be changed by reconfiguring the level map. - - - Each level has a in addition to its . The - is the string that is written into the output log. By default - the display name is the same as the level name, but this can be used to alias levels - or to localize the log output. - - - Some of the predefined levels recognized by the system are: - - - - . - - - . - - - . - - - . - - - . - - - . - - - . - - - - Nicko Cadell - Gert Driesen - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - The display name for this level. This may be localized or otherwise different from the name - - - Initializes a new instance of the class with - the specified level name and value. - - - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - - - Initializes a new instance of the class with - the specified level name and value. - - - - - - Returns the representation of the current - . - - - A representation of the current . - - - - Returns the level . - - - - - - Compares levels. - - The object to compare against. - true if the objects are equal. - - - Compares the levels of instances, and - defers to base class if the target object is not a - instance. - - - - - - Returns a hash code - - A hash code for the current . - - - Returns a hash code suitable for use in hashing algorithms and data - structures like a hash table. - - - Returns the hash code of the level . - - - - - - Compares this instance to a specified object and returns an - indication of their relative values. - - A instance or to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the - values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - This instance is less than . - - - Zero - This instance is equal to . - - - Greater than zero - - This instance is greater than . - -or- - is . - - - - - - - must be an instance of - or ; otherwise, an exception is thrown. - - - is not a . - - - - Returns a value indicating whether a specified - is greater than another specified . - - A - A - - true if is greater than - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is less than another specified . - - A - A - - true if is less than - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is greater than or equal to another specified . - - A - A - - true if is greater than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is less than or equal to another specified . - - A - A - - true if is less than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether two specified - objects have the same value. - - A or . - A or . - - true if the value of is the same as the - value of ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether two specified - objects have different values. - - A or . - A or . - - true if the value of is different from - the value of ; otherwise, false. - - - - Compares two levels. - - - - - - Compares two specified instances. - - The first to compare. - The second to compare. - - A 32-bit signed integer that indicates the relative order of the - two values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - is less than . - - - Zero - is equal to . - - - Greater than zero - is greater than . - - - - - - Compares two levels. - - - - - - The level designates a higher level than all the rest. - - - - - The level designates very severe error events. - System unusable, emergencies. - - - - - The level designates very severe error events - that will presumably lead the application to abort. - - - - - The level designates very severe error events. - Take immediate action, alerts. - - - - - The level designates very severe error events. - Critical condition, critical. - - - - - The level designates very severe error events. - - - - - The level designates error events that might - still allow the application to continue running. - - - - - The level designates potentially harmful - situations. - - - - - The level designates informational messages - that highlight the progress of the application at the highest level. - - - - - The level designates informational messages that - highlight the progress of the application at coarse-grained level. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates the lowest level possible. - - - - - Gets the name of this level. - - - The name of this level. - - - - Gets the name of this level. - - - - - - Gets the value of this level. - - - The value of this level. - - - - Gets the value of this level. - - - - - - Gets the display name of this level. - - - The display name of this level. - - - - Gets the display name of this level. - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a LevelCollection instance. - - list to create a readonly wrapper arround - - A LevelCollection wrapper that is read-only. - - - - - Initializes a new instance of the LevelCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the LevelCollection class - that has the specified initial capacity. - - - The number of elements that the new LevelCollection is initially capable of storing. - - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified LevelCollection. - - The LevelCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - Copies the entire LevelCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire LevelCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the LevelCollection. - - The to be added to the end of the LevelCollection. - The index at which the value has been added. - - - - Removes all elements from the LevelCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the LevelCollection. - - The to check for. - true if is found in the LevelCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the LevelCollection. - - The to locate in the LevelCollection. - - The zero-based index of the first occurrence of - in the entire LevelCollection, if found; otherwise, -1. - - - - - Inserts an element into the LevelCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the LevelCollection. - - The to remove from the LevelCollection. - - The specified was not found in the LevelCollection. - - - - - Removes the element at the specified index of the LevelCollection. - - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the LevelCollection. - - An for the entire LevelCollection. - - - - Adds the elements of another LevelCollection to the current LevelCollection. - - The LevelCollection whose elements should be added to the end of the current LevelCollection. - The new of the LevelCollection. - - - - Adds the elements of a array to the current LevelCollection. - - The array whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - - Adds the elements of a collection to the current LevelCollection. - - The collection whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - - Sets the capacity to the actual number of elements. - - - - - is less than zero - -or- - is equal to or greater than . - - - - - is less than zero - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the LevelCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - is less than zero - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - - Gets or sets the number of elements the LevelCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - A value - - - - - Supports simple iteration over a . - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - An evaluator that triggers at a threshold level - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - Nicko Cadell - - - - The threshold for triggering - - - - - Create a new evaluator using the threshold. - - - - Create a new evaluator using the threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Create a new evaluator using the specified threshold. - - the threshold to trigger at - - - Create a new evaluator using the specified threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Is this the triggering event? - - The event to check - This method returns true, if the event level - is equal or higher than the . - Otherwise it returns false - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - the threshold to trigger at - - - The that will cause this evaluator to trigger - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Mapping between string name and Level object - - - - Mapping between string name and object. - This mapping is held separately for each . - The level name is case insensitive. - - - Nicko Cadell - - - - Mapping from level name to Level object. The - level name is case insensitive - - - - - Construct the level map - - - - Construct the level map. - - - - - - Clear the internal maps of all levels - - - - Clear the internal maps of all levels - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - - - Create a new Level and add it to the map - - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - the display name to give to the Level - - - Create a new Level and add it to the map - - - - - - Add a Level to the map - - the Level to add - - - Add a Level to the map - - - - - - Lookup a named level from the map - - the name of the level to lookup is taken from this level. - If the level is not set on the map then this level is added - the level in the map with the name specified - - - Lookup a named level from the map. The name of the level to lookup is taken - from the property of the - argument. - - - If no level with the specified name is found then the - argument is added to the level map - and returned. - - - - - - Lookup a by name - - The name of the Level to lookup - a Level from the map with the name specified - - - Returns the from the - map with the name specified. If the no level is - found then null is returned. - - - - - - Return all possible levels as a list of Level objects. - - all possible levels as a list of Level objects - - - Return all possible levels as a list of Level objects. - - - - - - The internal representation of caller location information. - - - - This class uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. - - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - Nicko Cadell - Gert Driesen - - - - When location information is not available the constant - NA is returned. Current value of this string - constant is ?. - - - - - Constructor - - The declaring type of the method that is - the stack boundary into the logging system for this call. - - - Initializes a new instance of the - class based on the current thread. - - - - - - Constructor - - The fully qualified class name. - The method name. - The file name. - The line number of the method within the file. - - - Initializes a new instance of the - class with the specified data. - - - - - - Gets the fully qualified class name of the caller making the logging - request. - - - The fully qualified class name of the caller making the logging - request. - - - - Gets the fully qualified class name of the caller making the logging - request. - - - - - - Gets the file name of the caller. - - - The file name of the caller. - - - - Gets the file name of the caller. - - - - - - Gets the line number of the caller. - - - The line number of the caller. - - - - Gets the line number of the caller. - - - - - - Gets the method name of the caller. - - - The method name of the caller. - - - - Gets the method name of the caller. - - - - - - Gets all available caller information - - - All available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - Gets all available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - - - Static manager that controls the creation of repositories - - - - Static manager that controls the creation of repositories - - - This class is used by the wrapper managers (e.g. ) - to provide access to the objects. - - - This manager also holds the that is used to - lookup and create repositories. The selector can be set either programmatically using - the property, or by setting the log4net.RepositorySelector - AppSetting in the applications config file to the fully qualified type name of the - selector to use. - - - Nicko Cadell - Gert Driesen - - - - Private constructor to prevent instances. Only static methods should be used. - - - - Private constructor to prevent instances. Only static methods should be used. - - - - - - Hook the shutdown event - - - - On the full .NET runtime, the static constructor hooks up the - AppDomain.ProcessExit and AppDomain.DomainUnload> events. - These are used to shutdown the log4net system as the application exits. - - - - - - Register for ProcessExit and DomainUnload events on the AppDomain - - - - This needs to be in a separate method because the events make - a LinkDemand for the ControlAppDomain SecurityPermission. Because - this is a LinkDemand it is demanded at JIT time. Therefore we cannot - catch the exception in the method itself, we have to catch it in the - caller. - - - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - Returns the default instance. - - - - - - Returns the named logger if it exists. - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified repository. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - - Returns the named logger if it exists. - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified assembly's repository. - - - - If the named logger exists (in the specified assembly's repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - - Retrieves or creates a named logger. - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - - Retrieves or creates a named logger. - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - - Shorthand for . - - The repository to lookup in. - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - - Shorthand for . - - the assembly to use to lookup the repository - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - The repository to shutdown. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - The assembly to use to lookup the repository. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Resets all values contained in this repository instance to their defaults. - - The repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - - Resets all values contained in this repository instance to their defaults. - - The assembly to use to lookup the repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - - Gets an array of all currently defined repositories. - - An array of all the known objects. - - - Gets an array of all currently defined repositories. - - - - - - Internal method to get pertinent version info. - - A string of version info. - - - - Called when the event fires - - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - - - - Called when the event fires - - the that is exiting - null - - - Called when the event fires. - - - When the event is triggered the log4net system is . - - - - - - Initialize the default repository selector - - - - - Gets or sets the repository selector used by the . - - - The repository selector used by the . - - - - The repository selector () is used by - the to create and select repositories - (). - - - The caller to supplies either a string name - or an assembly (if not supplied the assembly is inferred using - ). - - - This context is used by the selector to lookup a specific repository. - - - For the full .NET Framework, the default repository is DefaultRepositorySelector; - for the .NET Compact Framework CompactRepositorySelector is the default - repository. - - - - - - Implementation of the interface. - - - - This class should be used as the base for all wrapper implementations. - - - Nicko Cadell - Gert Driesen - - - - Constructs a new wrapper for the specified logger. - - The logger to wrap. - - - Constructs a new wrapper for the specified logger. - - - - - - The logger that this object is wrapping - - - - - Gets the implementation behind this wrapper object. - - - The object that this object is implementing. - - - - The Logger object may not be the same object as this object - because of logger decorators. - - - This gets the actual underlying objects that is used to process - the log events. - - - - - - Portable data structure used by - - - - Portable data structure used by - - - Nicko Cadell - - - - The logger name. - - - - The logger name. - - - - - - Level of logging event. - - - - Level of logging event. Level cannot be Serializable - because it is a flyweight. Due to its special serialization it - cannot be declared final either. - - - - - - The application supplied message. - - - - The application supplied message of logging event. - - - - - - The name of thread - - - - The name of thread in which this logging event was generated - - - - - - The time the event was logged - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - - Location information for the caller. - - - - Location information for the caller. - - - - - - String representation of the user - - - - String representation of the user's windows name, - like DOMAIN\username - - - - - - String representation of the identity. - - - - String representation of the current thread's principal identity. - - - - - - The string representation of the exception - - - - The string representation of the exception - - - - - - String representation of the AppDomain. - - - - String representation of the AppDomain. - - - - - - Additional event specific properties - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - - - - Flags passed to the property - - - - Flags passed to the property - - - Nicko Cadell - - - - Fix the MDC - - - - - Fix the NDC - - - - - Fix the rendered message - - - - - Fix the thread name - - - - - Fix the callers location information - - - CAUTION: Very slow to generate - - - - - Fix the callers windows user name - - - CAUTION: Slow to generate - - - - - Fix the domain friendly name - - - - - Fix the callers principal name - - - CAUTION: May be slow to generate - - - - - Fix the exception text - - - - - Fix the event properties - - - - - No fields fixed - - - - - All fields fixed - - - - - Partial fields fixed - - - - This set of partial fields gives good performance. The following fields are fixed: - - - - - - - - - - - - - The internal representation of logging events. - - - - When an affirmative decision is made to log then a - instance is created. This instance - is passed around to the different log4net components. - - - This class is of concern to those wishing to extend log4net. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino - - - - The key into the Properties map for the host name value. - - - - - The key into the Properties map for the thread identity value. - - - - - The key into the Properties map for the user name value. - - - - - Initializes a new instance of the class - from the supplied parameters. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - The name of the logger of this event. - The level of this event. - The message of this event. - The exception for this event. - - - Except , and , - all fields of LoggingEvent are filled when actually needed. Call - to cache all data locally - to prevent inconsistencies. - - This method is called by the log4net framework - to create a logging event. - - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - The fields in the struct that have already been fixed. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - The parameter should be used to specify which fields in the - struct have been preset. Fields not specified in the - will be captured from the environment if requested or fixed. - - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - - Initializes a new instance of the class - using specific data. - - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - - Serialization constructor - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - - Ensure that the repository is set. - - the value for the repository - - - - Write the rendered message to a TextWriter - - the writer to write the message to - - - Unlike the property this method - does store the message data in the internal cache. Therefore - if called only once this method should be faster than the - property, however if the message is - to be accessed multiple times then the property will be more efficient. - - - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - The data in this event must be fixed before it can be serialized. - - - The method must be called during the - method call if this event - is to be used outside that method. - - - - - - Gets the portable data for this . - - The for this event. - - - A new can be constructed using a - instance. - - - Does a fix of the data - in the logging event before returning the event data. - - - - - - Gets the portable data for this . - - The set of data to ensure is fixed in the LoggingEventData - The for this event. - - - A new can be constructed using a - instance. - - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Obsolete. Use instead. - - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Returns this event's exception's rendered using the - . - - - - - - Fix instance fields that hold volatile data. - - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - incurred by calling but it - is essential to maintaining data consistency. - - - Calling is equivalent to - calling passing the parameter - false. - - - See for more - information. - - - - - - Fixes instance fields that hold volatile data. - - Set to true to not fix data that takes a long time to fix. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - The param controls the data that - is fixed. Some of the data that can be fixed takes a long time to - generate, therefore if you do not require those settings to be fixed - they can be ignored by setting the param - to true. This setting will ignore the - and settings. - - - Set to false to ensure that all - settings are fixed. - - - - - - Fix the fields specified by the parameter - - the fields to fix - - - Only fields specified in the will be fixed. - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - - Lookup a composite property in this event - - the key for the property to lookup - the value for the property - - - This event has composite properties that combine together properties from - several different contexts in the following order: - - - this events properties - - This event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - - - Get all the composite properties in this event - - the containing all the properties - - - See for details of the composite properties - stored by the event. - - - This method returns a single containing all the - properties defined for this event. - - - - - - The internal logging event data. - - - - - The internal logging event data. - - - - - The internal logging event data. - - - - - The fully qualified Type of the calling - logger class in the stack frame (i.e. the declaring type of the method). - - - - - The application supplied message of logging event. - - - - - The exception that was thrown. - - - This is not serialized. The string representation - is serialized instead. - - - - - The repository that generated the logging event - - - This is not serialized. - - - - - The fix state for this event - - - These flags indicate which fields have been fixed. - Not serialized. - - - - - Indicated that the internal cache is updateable (ie not fixed) - - - This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler - changes in the caching strategy. - - - - - Gets the time when the current process started. - - - This is the time when this process started. - - - - The TimeStamp is stored in the local time zone for this computer. - - - Tries to get the start time for the current process. - Failing that it returns the time of the first call to - this property. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating and therefore - without the process start time being reset. - - - - - - Gets the of the logging event. - - - The of the logging event. - - - - Gets the of the logging event. - - - - - - Gets the time of the logging event. - - - The time of the logging event. - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - - Gets the name of the logger that logged the event. - - - The name of the logger that logged the event. - - - - Gets the name of the logger that logged the event. - - - - - - Gets the location information for this logging event. - - - The location information for this logging event. - - - - The collected information is cached for future use. - - - See the class for more information on - supported frameworks and the different behavior in Debug and - Release builds. - - - - - - Gets the message object used to initialize this event. - - - The message object used to initialize this event. - - - - Gets the message object used to initialize this event. - Note that this event may not have a valid message object. - If the event is serialized the message object will not - be transferred. To get the text of the message the - property must be used - not this property. - - - If there is no defined message object for this event then - null will be returned. - - - - - - Gets the exception object used to initialize this event. - - - The exception object used to initialize this event. - - - - Gets the exception object used to initialize this event. - Note that this event may not have a valid exception object. - If the event is serialized the exception object will not - be transferred. To get the text of the exception the - method must be used - not this property. - - - If there is no defined exception object for this event then - null will be returned. - - - - - - The that this event was created in. - - - - The that this event was created in. - - - - - - Gets the message, rendered through the . - - - The message rendered through the . - - - - The collected information is cached for future use. - - - - - - Gets the name of the current thread. - - - The name of the current thread, or the thread ID when - the name is not available. - - - - The collected information is cached for future use. - - - - - - Gets the name of the current user. - - - The name of the current user, or NOT AVAILABLE when the - underlying runtime has no support for retrieving the name of the - current user. - - - - Calls WindowsIdentity.GetCurrent().Name to get the name of - the current windows user. - - - To improve performance, we could cache the string representation of - the name, and reuse that as long as the identity stayed constant. - Once the identity changed, we would need to re-assign and re-render - the string. - - - However, the WindowsIdentity.GetCurrent() call seems to - return different objects every time, so the current implementation - doesn't do this type of caching. - - - Timing for these operations: - - - - Method - Results - - - WindowsIdentity.GetCurrent() - 10000 loops, 00:00:00.2031250 seconds - - - WindowsIdentity.GetCurrent().Name - 10000 loops, 00:00:08.0468750 seconds - - - - This means we could speed things up almost 40 times by caching the - value of the WindowsIdentity.GetCurrent().Name property, since - this takes (8.04-0.20) = 7.84375 seconds. - - - - - - Gets the identity of the current thread principal. - - - The string name of the identity of the current thread principal. - - - - Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get - the name of the current thread principal. - - - - - - Gets the AppDomain friendly name. - - - The AppDomain friendly name. - - - - Gets the AppDomain friendly name. - - - - - - Additional event specific properties. - - - Additional event specific properties. - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - This property is for events that have been added directly to - this event. The aggregate properties (which include these - event properties) can be retrieved using - and . - - - Once the properties have been fixed this property - returns the combined cached properties. This ensures that updates to - this property are always reflected in the underlying storage. When - returning the combined properties there may be more keys in the - Dictionary than expected. - - - - - - The fixed fields in this event - - - The set of fields that are fixed in this event - - - - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - - Implementation of wrapper interface. - - - - This implementation of the interface - forwards to the held by the base class. - - - This logger has methods to allow the caller to log at the following - levels: - - - - DEBUG - - The and methods log messages - at the DEBUG level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - INFO - - The and methods log messages - at the INFO level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - WARN - - The and methods log messages - at the WARN level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - ERROR - - The and methods log messages - at the ERROR level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - FATAL - - The and methods log messages - at the FATAL level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - - The values for these levels and their semantic meanings can be changed by - configuring the for the repository. - - - Nicko Cadell - Gert Driesen - - - - The ILog interface is use by application to log messages into - the log4net framework. - - - - Use the to obtain logger instances - that implement this interface. The - static method is used to get logger instances. - - - This class contains methods for logging at different levels and also - has properties for determining if those logging levels are - enabled in the current configuration. - - - This interface can be implemented in different ways. This documentation - specifies reasonable behavior that a caller can expect from the actual - implementation, however different implementations reserve the right to - do things differently. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - - log.Info("Application Start"); - log.Debug("This is a debug message"); - - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - - Nicko Cadell - Gert Driesen - - - Log a message object with the level. - - Log a message object with the level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Logs a message object with the level. - - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Logs a message object with the INFO level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Logs a message object with the level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - For some ILog interface log, when you write: - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, string construction and concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed (who isn't), then you should write: - - - if (log.IsDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in and once in - the . This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. This is the preferred style of logging. - - Alternatively if your logger is available statically then the is debug - enabled state can be stored in a static variable like this: - - - private static readonly bool isDebugEnabled = log.IsDebugEnabled; - - - Then when you come to log you can write: - - - if (isDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way the debug enabled state is only queried once - when the class is loaded. Using a private static readonly - variable is the most efficient because it is a run time constant - and can be heavily optimized by the JIT compiler. - - - Of course if you use a static readonly variable to - hold the enabled state of the logger then you cannot - change the enabled state at runtime to vary the logging - that is produced. You have to decide if you need absolute - speed or runtime flexibility. - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Construct a new wrapper for the specified logger. - - The logger to wrap. - - - Construct a new wrapper for the specified logger. - - - - - - Virtual method called when the configuration of the repository changes - - the repository holding the levels - - - Virtual method called when the configuration of the repository changes - - - - - - Logs a message object with the DEBUG level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - DEBUG level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the DEBUG level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the DEBUG level including - the stack trace of the passed - as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the INFO level. - - The message object to log. - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - INFO level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the INFO level. - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the INFO level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the WARN level. - - the message object to log - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - WARN level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the WARN level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the WARN level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the ERROR level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - ERROR level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the ERROR level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the ERROR level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the FATAL level. - - The message object to log. - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - FATAL level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the FATAL level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the FATAL level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Event handler for the event - - the repository - Empty - - - - The fully qualified name of this declaring type not the type of any subclass. - - - - - Checks if this logger is enabled for the DEBUG - level. - - - true if this logger is enabled for DEBUG events, - false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - - For some log Logger object, when you write: - - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed, then you should write: - - - if (log.IsDebugEnabled()) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in IsDebugEnabled and once in - the Debug. This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. - - - - - - Checks if this logger is enabled for the INFO level. - - - true if this logger is enabled for INFO events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - - Checks if this logger is enabled for the WARN level. - - - true if this logger is enabled for WARN events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - - Checks if this logger is enabled for the ERROR level. - - - true if this logger is enabled for ERROR events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - - Checks if this logger is enabled for the FATAL level. - - - true if this logger is enabled for FATAL events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - - A SecurityContext used by log4net when interacting with protected resources - - - - A SecurityContext used by log4net when interacting with protected resources - for example with operating system services. This can be used to impersonate - a principal that has been granted privileges on the system resources. - - - Nicko Cadell - - - - Impersonate this SecurityContext - - State supplied by the caller - An instance that will - revoke the impersonation of this SecurityContext, or null - - - Impersonate this security context. Further calls on the current - thread should now be made in the security context provided - by this object. When the result - method is called the security - context of the thread should be reverted to the state it was in - before was called. - - - - - - The providers default instances. - - - - A configured component that interacts with potentially protected system - resources uses a to provide the elevated - privileges required. If the object has - been not been explicitly provided to the component then the component - will request one from this . - - - By default the is - an instance of which returns only - objects. This is a reasonable default - where the privileges required are not know by the system. - - - This default behavior can be overridden by subclassing the - and overriding the method to return - the desired objects. The default provider - can be replaced by programmatically setting the value of the - property. - - - An alternative is to use the log4net.Config.SecurityContextProviderAttribute - This attribute can be applied to an assembly in the same way as the - log4net.Config.XmlConfiguratorAttribute". The attribute takes - the type to use as the as an argument. - - - Nicko Cadell - - - - The default provider - - - - - Protected default constructor to allow subclassing - - - - Protected default constructor to allow subclassing - - - - - - Create a SecurityContext for a consumer - - The consumer requesting the SecurityContext - An impersonation context - - - The default implementation is to return a . - - - Subclasses should override this method to provide their own - behavior. - - - - - - Gets or sets the default SecurityContextProvider - - - The default SecurityContextProvider - - - - The default provider is used by configured components that - require a and have not had one - given to them. - - - By default this is an instance of - that returns objects. - - - The default provider can be set programmatically by setting - the value of this property to a sub class of - that has the desired behavior. - - - - - - Delegate used to handle creation of new wrappers. - - The logger to wrap in a wrapper. - - - Delegate used to handle creation of new wrappers. This delegate - is called from the - method to construct the wrapper for the specified logger. - - - The delegate to use is supplied to the - constructor. - - - - - - Maps between logger objects and wrapper objects. - - - - This class maintains a mapping between objects and - objects. Use the method to - lookup the for the specified . - - - New wrapper instances are created by the - method. The default behavior is for this method to delegate construction - of the wrapper to the delegate supplied - to the constructor. This allows specialization of the behavior without - requiring subclassing of this type. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the - - The handler to use to create the wrapper objects. - - - Initializes a new instance of the class with - the specified handler to create the wrapper objects. - - - - - - Gets the wrapper object for the specified logger. - - The wrapper object for the specified logger - - - If the logger is null then the corresponding wrapper is null. - - - Looks up the wrapper it it has previously been requested and - returns it. If the wrapper has never been requested before then - the virtual method is - called. - - - - - - Creates the wrapper object for the specified logger. - - The logger to wrap in a wrapper. - The wrapper object for the logger. - - - This implementation uses the - passed to the constructor to create the wrapper. This method - can be overridden in a subclass. - - - - - - Called when a monitored repository shutdown event is received. - - The that is shutting down - - - This method is called when a that this - is holding loggers for has signaled its shutdown - event . The default - behavior of this method is to release the references to the loggers - and their wrappers generated for this repository. - - - - - - Event handler for repository shutdown event. - - The sender of the event. - The event args. - - - - Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings - - - - - The handler to use to create the extension wrapper objects. - - - - - Internal reference to the delegate used to register for repository shutdown events. - - - - - Gets the map of logger repositories. - - - Map of logger repositories. - - - - Gets the hashtable that is keyed on . The - values are hashtables keyed on with the - value being the corresponding . - - - - - - Formats a as "HH:mm:ss,fff". - - - - Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". - - - Nicko Cadell - Gert Driesen - - - - Render a as a string. - - - - Interface to abstract the rendering of a - instance into a string. - - - The method is used to render the - date to a text writer. - - - Nicko Cadell - Gert Driesen - - - - Formats the specified date as a string. - - The date to format. - The writer to write to. - - - Format the as a string and write it - to the provided. - - - - - - String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. - - - - - String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. - - - - - String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. - - - - - Renders the date into a string. Format is "HH:mm:ss". - - The date to render into a string. - The string builder to write to. - - - Subclasses should override this method to render the date - into a string using a precision up to the second. This method - will be called at most once per second and the result will be - reused if it is needed again during the same second. - - - - - - Renders the date into a string. Format is "HH:mm:ss,fff". - - The date to render into a string. - The writer to write to. - - - Uses the method to generate the - time string up to the seconds and then appends the current - milliseconds. The results from are - cached and is called at most once - per second. - - - Sub classes should override - rather than . - - - - - - Last stored time with precision up to the second. - - - - - Last stored time with precision up to the second, formatted - as a string. - - - - - Last stored time with precision up to the second, formatted - as a string. - - - - - Formats a as "dd MMM yyyy HH:mm:ss,fff" - - - - Formats a in the format - "dd MMM yyyy HH:mm:ss,fff" for example, - "06 Nov 1994 15:49:37,459". - - - Nicko Cadell - Gert Driesen - Angelika Schnagl - - - - Default constructor. - - - - Initializes a new instance of the class. - - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" - for example, "06 Nov 1994 15:49:37". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - - The format info for the invariant culture. - - - - - Formats the as "yyyy-MM-dd HH:mm:ss,fff". - - - - Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - - Formats the using the method. - - - - Formats the using the method. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The format string. - - - Initializes a new instance of the class - with the specified format string. - - - The format string must be compatible with the options - that can be supplied to . - - - - - - Formats the date using . - - The date to convert to a string. - The writer to write to. - - - Uses the date format string supplied to the constructor to call - the method to format the date. - - - - - - The format string used to format the . - - - - The format string must be compatible with the options - that can be supplied to . - - - - - - This filter drops all . - - - - You can add this filter to the end of a filter chain to - switch from the default "accept all unless instructed otherwise" - filtering behavior to a "deny all unless instructed otherwise" - behavior. - - - Nicko Cadell - Gert Driesen - - - - Subclass this type to implement customized logging event filtering - - - - Users should extend this class to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface to provide customized logging event filtering - - - - Users should implement this interface to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - - Decide if the logging event should be logged through an appender. - - The LoggingEvent to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - - Points to the next filter in the filter chain. - - - - See for more information. - - - - - - Initialize the filter with the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Typically filter's options become active immediately on set, - however this method must still be called. - - - - - - Decide if the should be logged through an appender. - - The to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - This method is marked abstract and must be implemented - in a subclass. - - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - - Default constructor - - - - - Always returns the integer constant - - the LoggingEvent to filter - Always returns - - - Ignores the event being logged and just returns - . This can be used to change the default filter - chain behavior from to . This filter - should only be used as the last filter in the chain - as any further filters will be ignored! - - - - - - The return result from - - - - The return result from - - - - - - The log event must be dropped immediately without - consulting with the remaining filters, if any, in the chain. - - - - - This filter is neutral with respect to the log event. - The remaining filters, if any, should be consulted for a final decision. - - - - - The log event must be logged immediately without - consulting with the remaining filters, if any, in the chain. - - - - - This is a very simple filter based on matching. - - - - The filter admits two options and - . If there is an exact match between the value - of the option and the of the - , then the method returns in - case the option value is set - to true, if it is false then - is returned. If the does not match then - the result will be . - - - Nicko Cadell - Gert Driesen - - - - flag to indicate if the filter should on a match - - - - - the to match against - - - - - Default constructor - - - - - Tests if the of the logging event matches that of the filter - - the event to filter - see remarks - - - If the of the event matches the level of the - filter then the result of the function depends on the - value of . If it is true then - the function will return , it it is false then it - will return . If the does not match then - the result will be . - - - - - - when matching - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - The that the filter will match - - - - The level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - This is a simple filter based on matching. - - - - The filter admits three options and - that determine the range of priorities that are matched, and - . If there is a match between the range - of priorities and the of the , then the - method returns in case the - option value is set to true, if it is false - then is returned. If there is no match, is returned. - - - Nicko Cadell - Gert Driesen - - - - Flag to indicate the behavior when matching a - - - - - the minimum value to match - - - - - the maximum value to match - - - - - Default constructor - - - - - Check if the event should be logged. - - the logging event to check - see remarks - - - If the of the logging event is outside the range - matched by this filter then - is returned. If the is matched then the value of - is checked. If it is true then - is returned, otherwise - is returned. - - - - - - when matching and - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - Set the minimum matched - - - - The minimum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Sets the maximum matched - - - - The maximum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Simple filter to match a string in the event's logger name. - - - - The works very similar to the . It admits two - options and . If the - of the starts - with the value of the option, then the - method returns in - case the option value is set to true, - if it is false then is returned. - - - Daniel Cazzulino - - - - Flag to indicate the behavior when we have a match - - - - - The logger name string to substring match against the event - - - - - Default constructor - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the equals the beginning of - the incoming () - then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - when matching - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - The that the filter will match - - - - This filter will attempt to match this value against logger name in - the following way. The match will be done against the beginning of the - logger name (using ). The match is - case sensitive. If a match is found then - the result depends on the value of . - - - - - - Simple filter to match a keyed string in the - - - - Simple filter to match a keyed string in the - - - As the MDC has been replaced with layered properties the - should be used instead. - - - Nicko Cadell - Gert Driesen - - - - Simple filter to match a string an event property - - - - Simple filter to match a string in the value for a - specific event property - - - Nicko Cadell - - - - Simple filter to match a string in the rendered message - - - - Simple filter to match a string in the rendered message - - - Nicko Cadell - Gert Driesen - - - - Flag to indicate the behavior when we have a match - - - - - The string to substring match against the message - - - - - A string regex to match - - - - - A regex object to match (generated from m_stringRegexToMatch) - - - - - Default constructor - - - - - Initialize and precompile the Regex if required - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the occurs as a substring within - the message then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - when matching or - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - Sets the static string to match - - - - The string that will be substring matched against - the rendered message. If the message contains this - string then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - - Sets the regular expression to match - - - - The regular expression pattern that will be matched against - the rendered message. If the message matches this - pattern then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - - The key to use to lookup the string from the event properties - - - - - Default constructor - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The event property for the is matched against - the . - If the occurs as a substring within - the property value then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - The key to lookup in the event properties and then match against. - - - - The key name to use to lookup in the properties map of the - . The match will be performed against - the value of this property if it exists. - - - - - - Simple filter to match a string in the - - - - Simple filter to match a string in the - - - As the MDC has been replaced with named stacks stored in the - properties collections the should - be used instead. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Sets the to "NDC". - - - - - - Write the event appdomain name to the output - - - - Writes the to the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - Nicko Cadell - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - - Nicko Cadell - Gert Driesen - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Protected constructor - - - - Initializes a new instance of the class. - - - - - - Evaluate this pattern converter and write the output to a writer. - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the appropriate way. - - - - - - Set the next pattern converter in the chains - - the pattern converter that should follow this converter in the chain - the next converter - - - The PatternConverter can merge with its neighbor during this method (or a sub class). - Therefore the return value may or may not be the value of the argument passed in. - - - - - - Write the pattern converter to the writer with appropriate formatting - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - This method calls to allow the subclass to perform - appropriate conversion of the pattern converter. If formatting options have - been specified via the then this method will - apply those formattings before writing the output. - - - - - - Fast space padding method. - - to which the spaces will be appended. - The number of spaces to be padded. - - - Fast space padding method. - - - - - - The option string to the converter - - - - - Write an dictionary to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the to a writer in the form: - - - {key1=value1, key2=value2, key3=value3} - - - If the specified - is not null then it is used to render the key and value to text, otherwise - the object's ToString method is called. - - - - - - Write an object to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the Object to a writer. If the specified - is not null then it is used to render the object to text, otherwise - the object's ToString method is called. - - - - - - Get the next pattern converter in the chain - - - the next pattern converter in the chain - - - - Get the next pattern converter in the chain - - - - - - Gets or sets the formatting info for this converter - - - The formatting info for this converter - - - - Gets or sets the formatting info for this converter - - - - - - Gets or sets the option value for this converter - - - The option for this converter - - - - Gets or sets the option value for this converter - - - - - - Initializes a new instance of the class. - - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The on which the pattern converter should be executed. - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - - Flag indicating if this converter handles exceptions - - - false if this converter handles exceptions - - - - - Flag indicating if this converter handles the logging event exception - - false if this converter handles the logging event exception - - - If this converter handles the exception object contained within - , then this property should be set to - false. Otherwise, if the layout ignores the exception - object, then the property should be set to true. - - - Set this value to override a this default setting. The default - value is true, this converter does not handle the exception. - - - - - - Write the event appdomain name to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output . - - - - - - Date pattern converter, uses a to format - the date of a . - - - - Render the to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the - method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - - The is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - - Initialize the converter pattern based on the property. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Convert the pattern into the rendered message - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone. - - - - - - Write the exception text to the output - - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - Nicko Cadell - - - - Default constructor - - - - - Write the exception text to the output - - that will receive the formatted result. - the event being logged - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - - Writes the caller location file name to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - - Write the caller location file name to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - - Write the caller location info to the output - - - - Writes the to the output writer. - - - Nicko Cadell - - - - Write the caller location info to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output writer. - - - - - - Writes the event identity to the output - - - - Writes the value of the to - the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - - Writes the event identity to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the - to - the output . - - - - - - Write the event level to the output - - - - Writes the display name of the event - to the writer. - - - Nicko Cadell - - - - Write the event level to the output - - that will receive the formatted result. - the event being logged - - - Writes the of the - to the . - - - - - - Write the caller location line number to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - - Write the caller location line number to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - - Converter for logger name - - - - Outputs the of the event. - - - Nicko Cadell - - - - Converter to output and truncate '.' separated strings - - - - This abstract class supports truncating a '.' separated string - to show a specified number of elements from the right hand side. - This is used to truncate class names that are fully qualified. - - - Subclasses should override the method to - return the fully qualified string. - - - Nicko Cadell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Get the fully qualified string data - - the event being logged - the fully qualified name - - - Overridden by subclasses to get the fully qualified name before the - precision is applied to it. - - - Return the fully qualified '.' (dot/period) separated string. - - - - - - Convert the pattern to the rendered message - - that will receive the formatted result. - the event being logged - - Render the to the precision - specified by the property. - - - - - Gets the fully qualified name of the logger - - the event being logged - The fully qualified logger name - - - Returns the of the . - - - - - - Writes the event message to the output - - - - Uses the method - to write out the event message. - - - Nicko Cadell - - - - Writes the event message to the output - - that will receive the formatted result. - the event being logged - - - Uses the method - to write out the event message. - - - - - - Write the method name to the output - - - - Writes the caller location to - the output. - - - Nicko Cadell - - - - Write the method name to the output - - that will receive the formatted result. - the event being logged - - - Writes the caller location to - the output. - - - - - - Converter to include event NDC - - - - Outputs the value of the event property named NDC. - - - The should be used instead. - - - Nicko Cadell - - - - Write the event NDC to the output - - that will receive the formatted result. - the event being logged - - - As the thread context stacks are now stored in named event properties - this converter simply looks up the value of the NDC property. - - - The should be used instead. - - - - - - Property pattern converter - - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - Nicko Cadell - - - - Write the property value to the output - - that will receive the formatted result. - the event being logged - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - - Converter to output the relative time of the event - - - - Converter to output the time of the event relative to the start of the program. - - - Nicko Cadell - - - - Write the relative time to the output - - that will receive the formatted result. - the event being logged - - - Writes out the relative time of the event in milliseconds. - That is the number of milliseconds between the event - and the . - - - - - - Helper method to get the time difference between two DateTime objects - - start time (in the current local time zone) - end time (in the current local time zone) - the time difference in milliseconds - - - - Converter to include event thread name - - - - Writes the to the output. - - - Nicko Cadell - - - - Write the ThreadName to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the . - - - - - - Pattern converter for the class name - - - - Outputs the of the event. - - - Nicko Cadell - - - - Gets the fully qualified name of the class - - the event being logged - The fully qualified type name for the caller location - - - Returns the of the . - - - - - - Converter to include event user name - - Douglas de la Torre - Nicko Cadell - - - - Convert the pattern to the rendered message - - that will receive the formatted result. - the event being logged - - - - Write the TimeStamp to the output - - - - Date pattern converter, uses a to format - the date of a . - - - Uses a to format the - in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - - Write the TimeStamp to the output - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone, this is converted - to Universal time before it is rendered. - - - - - - - A Layout that renders only the Exception text from the logging event - - - - A Layout that renders only the Exception text from the logging event. - - - This Layout should only be used with appenders that utilize multiple - layouts (e.g. ). - - - Nicko Cadell - Gert Driesen - - - - Extend this abstract class to create your own log layout format. - - - - This is the base implementation of the - interface. Most layout objects should extend this class. - - - - - - Subclasses must implement the - method. - - - Subclasses should set the in their default - constructor. - - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by layout objects - - - - An object is used to format a - as text. The method is called by an - appender to transform the into a string. - - - The layout can also supply and - text that is appender before any events and after all the events respectively. - - - Nicko Cadell - Gert Driesen - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text and output to a writer. - - - If the caller does not have a and prefers the - event to be formatted as a then the following - code can be used to format the event into a . - - - StringWriter writer = new StringWriter(); - Layout.Format(writer, loggingEvent); - string formattedEvent = writer.ToString(); - - - - - - The content type output by this layout. - - The content type - - - The content type output by this layout. - - - This is a MIME type e.g. "text/plain". - - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - - Flag indicating if this layout handle exceptions - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - - - - The header text - - - - See for more information. - - - - - - The footer text - - - - See for more information. - - - - - - Flag indicating if this layout handles exceptions - - - - false if this layout handles exceptions - - - - - - Empty default constructor - - - - Empty default constructor - - - - - - Activate component options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This method must be implemented by the subclass. - - - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text. - - - - - - The content type output by this layout. - - The content type is "text/plain" - - - The content type output by this layout. - - - This base class uses the value "text/plain". - To change this value a subclass must override this - property. - - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - - Flag indicating if this layout handles exceptions - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - Set this value to override a this default setting. The default - value is true, this layout does not handle the exception. - - - - - - Default constructor - - - - Constructs a ExceptionLayout - - - - - - Activate component options - - - - Part of the component activation - framework. - - - This method does nothing as options become effective immediately. - - - - - - Gets the exception text from the logging event - - The TextWriter to write the formatted event to - the event being logged - - - Write the exception string to the . - The exception string is retrieved from . - - - - - - Interface for raw layout objects - - - - Interface used to format a - to an object. - - - This interface should not be confused with the - interface. This interface is used in - only certain specialized situations where a raw object is - required rather than a formatted string. The - is not generally useful than this interface. - - - Nicko Cadell - Gert Driesen - - - - Implement this method to create your own layout format. - - The event to format - returns the formatted event - - - Implement this method to create your own layout format. - - - - - - Adapts any to a - - - - Where an is required this adapter - allows a to be specified. - - - Nicko Cadell - Gert Driesen - - - - The layout to adapt - - - - - Construct a new adapter - - the layout to adapt - - - Create the adapter for the specified . - - - - - - Format the logging event as an object. - - The event to format - returns the formatted event - - - Format the logging event as an object. - - - Uses the object supplied to - the constructor to perform the formatting. - - - - - - A flexible layout configurable with pattern string. - - - - The goal of this class is to a - as a string. The results - depend on the conversion pattern. - - - The conversion pattern is closely related to the conversion - pattern of the printf function in C. A conversion pattern is - composed of literal text and format control expressions called - conversion specifiers. - - - You are free to insert any literal text within the conversion - pattern. - - - Each conversion specifier starts with a percent sign (%) and is - followed by optional format modifiers and a conversion - pattern name. The conversion pattern name specifies the type of - data, e.g. logger, level, date, thread name. The format - modifiers control such things as field width, padding, left and - right justification. The following is a simple example. - - - Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume - that the log4net environment was set to use a PatternLayout. Then the - statements - - - ILog log = LogManager.GetLogger(typeof(TestApp)); - log.Debug("Message 1"); - log.Warn("Message 2"); - - would yield the output - - DEBUG [main]: Message 1 - WARN [main]: Message 2 - - - Note that there is no explicit separator between text and - conversion specifiers. The pattern parser knows when it has reached - the end of a conversion specifier when it reads a conversion - character. In the example above the conversion specifier - %-5level means the level of the logging event should be left - justified to a width of five characters. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - a - Equivalent to appdomain - - - appdomain - - Used to output the friendly name of the AppDomain where the - logging event was generated. - - - - c - Equivalent to logger - - - C - Equivalent to type - - - class - Equivalent to type - - - d - Equivalent to date - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - exception - - - Used to output the exception passed in with the log message. - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - F - Equivalent to file - - - file - - - Used to output the file name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - WARNING Generating caller information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - l - Equivalent to location - - - L - Equivalent to line - - - location - - - Used to output location information of the caller which generated - the logging event. - - - The location information depends on the CLI implementation but - usually consists of the fully qualified name of the calling - method followed by the callers source the file name and line - number between parentheses. - - - The location information can be very useful. However, its - generation is extremely slow. Its use should be avoided - unless execution speed is not an issue. - - - See the note below on the availability of caller location information. - - - - - level - - - Used to output the level of the logging event. - - - - - line - - - Used to output the line number from where the logging request - was issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - logger - - - Used to output the logger of the logging event. The - logger conversion specifier can be optionally followed by - precision specifier, that is a decimal constant in - brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the logger name will be - printed. By default the logger name is printed in full. - - - For example, for the logger name "a.b.c" the pattern - %logger{2} will output "b.c". - - - - - m - Equivalent to message - - - M - Equivalent to method - - - message - - - Used to output the application supplied message associated with - the logging event. - - - - - mdc - - - The MDC (old name for the ThreadContext.Properties) is now part of the - combined event properties. This pattern is supported for compatibility - but is equivalent to property. - - - - - method - - - Used to output the method name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - n - Equivalent to newline - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - ndc - - - Used to output the NDC (nested diagnostic context) associated - with the thread that generated the logging event. - - - - - p - Equivalent to level - - - P - Equivalent to property - - - properties - Equivalent to property - - - property - - - Used to output the an event specific property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are added to events by loggers or appenders. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the event properties - - The event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - - r - Equivalent to timestamp - - - t - Equivalent to thread - - - timestamp - - - Used to output the number of milliseconds elapsed since the start - of the application until the creation of the logging event. - - - - - thread - - - Used to output the name of the thread that generated the - logging event. Uses the thread number if no name is available. - - - - - type - - - Used to output the fully qualified type name of the caller - issuing the logging request. This conversion specifier - can be optionally followed by precision specifier, that - is a decimal constant in brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the class name will be - printed. By default the class name is output in fully qualified form. - - - For example, for the class name "log4net.Layout.PatternLayout", the - pattern %type{1} will output "PatternLayout". - - - WARNING Generating the caller class information is - slow. Thus, its use should be avoided unless execution speed is - not an issue. - - - See the note below on the availability of caller location information. - - - - - u - Equivalent to identity - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - WARNING Generating caller WindowsIdentity information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - w - Equivalent to username - - - x - Equivalent to ndc - - - X - Equivalent to mdc - - - % - - - The sequence %% outputs a single percent sign. - - - - - - The single letter patterns are deprecated in favor of the - longer more descriptive pattern names. - - - By default the relevant information is output as is. However, - with the aid of format modifiers it is possible to change the - minimum field width, the maximum field width and justification. - - - The optional format modifier is placed between the percent sign - and the conversion pattern name. - - - The first optional format modifier is the left justification - flag which is just the minus (-) character. Then comes the - optional minimum field width modifier. This is a decimal - constant that represents the minimum number of characters to - output. If the data item requires fewer characters, it is padded on - either the left or the right until the minimum width is - reached. The default is to pad on the left (right justify) but you - can specify right padding with the left justification flag. The - padding character is space. If the data item is larger than the - minimum field width, the field is expanded to accommodate the - data. The value is never truncated. - - - This behavior can be changed using the maximum field - width modifier which is designated by a period followed by a - decimal constant. If the data item is longer than the maximum - field, then the extra characters are removed from the - beginning of the data item and not from the end. For - example, it the maximum field width is eight and the data item is - ten characters long, then the first two characters of the data item - are dropped. This behavior deviates from the printf function in C - where truncation is done from the end. - - - Below are various format modifier examples for the logger - conversion specifier. - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Format modifierleft justifyminimum widthmaximum widthcomment
%20loggerfalse20none - - Left pad with spaces if the logger name is less than 20 - characters long. - -
%-20loggertrue20none - - Right pad with spaces if the logger - name is less than 20 characters long. - -
%.30loggerNAnone30 - - Truncate from the beginning if the logger - name is longer than 30 characters. - -
%20.30loggerfalse2030 - - Left pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
%-20.30loggertrue2030 - - Right pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
-
- - Note about caller location information.
- The following patterns %type %file %line %method %location %class %C %F %L %l %M - all generate caller location information. - Location information uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. -
- - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - - Additional pattern converters may be registered with a specific - instance using the method. - -
- - This is a more detailed pattern. - %timestamp [%thread] %level %logger %ndc - %message%newline - - - A similar pattern except that the relative time is - right padded if less than 6 digits, thread name is right padded if - less than 15 characters and truncated if longer and the logger - name is left padded if shorter than 30 characters and truncated if - longer. - %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino -
- - - Default pattern string for log output. - - - - Default pattern string for log output. - Currently set to the string "%message%newline" - which just prints the application supplied message. - - - - - - A detailed conversion pattern - - - - A conversion pattern which includes Time, Thread, Logger, and Nested Context. - Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. - - - - - - Internal map of converter identifiers to converter types. - - - - This static map is overridden by the m_converterRegistry instance map - - - - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternLayout only - - - - - Initialize the global registry - - - - Defines the builtin global rules. - - - - - - Constructs a PatternLayout using the DefaultConversionPattern - - - - The default pattern just produces the application supplied message. - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - As per the contract the - method must be called after the properties on this object have been - configured. - - - - - - Constructs a PatternLayout using the supplied conversion pattern - - the pattern to use - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - When using this constructor the method - need not be called. This may not be the case when using a subclass. - - - - - - Create the pattern parser instance - - the pattern to parse - The that will format the event - - - Creates the used to parse the conversion string. Sets the - global and instance rules on the . - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a formatted string as specified by the conversion pattern. - - the event being logged - The TextWriter to write the formatted event to - - - Parse the using the patter format - specified in the property. - - - - - - Add a converter to this PatternLayout - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - - Add a converter to this PatternLayout - - the name of the conversion pattern for this converter - the type of the converter - - - Add a named pattern converter to this instance. This - converter will be used in the formatting of the event. - This method must be called before . - - - The specified must extend the - type. - - - - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - - Wrapper class used to map converter names to converter types - - - - Pattern converter info class used during configuration to - pass to the - method. - - - - - - default constructor - - - - - Gets or sets the name of the conversion pattern - - - - The name of the pattern in the format string - - - - - - Gets or sets the type of the converter - - - - The value specified must extend the - type. - - - - - - Type converter for the interface - - - - Used to convert objects to the interface. - Supports converting from the interface to - the interface using the . - - - Nicko Cadell - Gert Driesen - - - - Interface supported by type converters - - - - This interface supports conversion from arbitrary types - to a single target type. See . - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Test if the can be converted to the - type supported by this converter. - - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Converts the to the type supported - by this converter. - - - - - - Can the sourceType be converted to an - - the source to be to be converted - true if the source type can be converted to - - - Test if the can be converted to a - . Only is supported - as the . - - - - - - Convert the value to a object - - the value to convert - the object - - - Convert the object to a - object. If the object - is a then the - is used to adapt between the two interfaces, otherwise an - exception is thrown. - - - - - - Extract the value of a property from the - - - - Extract the value of a property from the - - - Nicko Cadell - - - - Constructs a RawPropertyLayout - - - - - Lookup the property for - - The event to format - returns property value - - - Looks up and returns the object value of the property - named . If there is no property defined - with than name then null will be returned. - - - - - - The name of the value to lookup in the LoggingEvent Properties collection. - - - Value to lookup in the LoggingEvent Properties collection - - - - String name of the property to lookup in the . - - - - - - Extract the date from the - - - - Extract the date from the - - - Nicko Cadell - Gert Driesen - - - - Constructs a RawTimeStampLayout - - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in local time. To format the time stamp - in universal time use . - - - - - - Extract the date from the - - - - Extract the date from the - - - Nicko Cadell - Gert Driesen - - - - Constructs a RawUtcTimeStampLayout - - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in universal time. To format the time stamp - in local time use . - - - - - - A very simple layout - - - - SimpleLayout consists of the level of the log statement, - followed by " - " and then the log message itself. For example, - - DEBUG - Hello world - - - - Nicko Cadell - Gert Driesen - - - - Constructs a SimpleLayout - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a simple formatted output. - - the event being logged - The TextWriter to write the formatted event to - - - Formats the event as the level of the even, - followed by " - " and then the log message itself. The - output is terminated by a newline. - - - - - - Layout that formats the log events as XML elements. - - - - The output of the consists of a series of - log4net:event elements. It does not output a complete well-formed XML - file. The output is designed to be included as an external entity - in a separate file to form a correct XML file. - - - For example, if abc is the name of the file where - the output goes, then a well-formed XML file would - be: - - - <?xml version="1.0" ?> - - <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> - - <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> - &data; - </log4net:events> - - - This approach enforces the independence of the - and the appender where it is embedded. - - - The version attribute helps components to correctly - interpret output generated by . The value of - this attribute should be "1.2" for release 1.2 and later. - - - Alternatively the Header and Footer properties can be - configured to output the correct XML header, open tag and close tag. - When setting the Header and Footer properties it is essential - that the underlying data store not be appendable otherwise the data - will become invalid XML. - - - Nicko Cadell - Gert Driesen - - - - Layout that formats the log events as XML elements. - - - - This is an abstract class that must be subclassed by an implementation - to conform to a specific schema. - - - Deriving classes must implement the method. - - - Nicko Cadell - Gert Driesen - - - - Protected constructor to support subclasses - - - - Initializes a new instance of the class - with no location info. - - - - - - Protected constructor to support subclasses - - - - The parameter determines whether - location information will be output by the layout. If - is set to true, then the - file name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a formatted string. - - The event being logged. - The TextWriter to write the formatted event to - - - Format the and write it to the . - - - This method creates an that writes to the - . The is passed - to the method. Subclasses should override the - method rather than this method. - - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Subclasses should override this method to format - the as XML. - - - - - - Flag to indicate if location information should be included in - the XML events. - - - - - Writer adapter that ignores Close - - - - - The string to replace invalid chars with - - - - - Gets a value indicating whether to include location information in - the XML events. - - - true if location information should be included in the XML - events; otherwise, false. - - - - If is set to true, then the file - name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - The string to replace characters that can not be expressed in XML with. - - - Not all characters may be expressed in XML. This property contains the - string to replace those that can not with. This defaults to a ?. Set it - to the empty string to simply remove offending characters. For more - details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets - Character replacement will occur in the log message, the property names - and the property values. - - - - - - - Gets the content type output by this layout. - - - As this is the XML layout, the value is always "text/xml". - - - - As this is the XML layout, the value is always "text/xml". - - - - - - Constructs an XmlLayout - - - - - Constructs an XmlLayout. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SmtpAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Builds a cache of the element names - - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Override the base class method - to write the to the . - - - - - - The prefix to use for all generated element names - - - - - The prefix to use for all element names - - - - The default prefix is log4net. Set this property - to change the prefix. If the prefix is set to an empty string - then no prefix will be written. - - - - - - Set whether or not to base64 encode the message. - - - - By default the log message will be written as text to the xml - output. This can cause problems when the message contains binary - data. By setting this to true the contents of the message will be - base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the log message. - - - - - - Set whether or not to base64 encode the property values. - - - - By default the properties will be written as text to the xml - output. This can cause problems when one or more properties contain - binary data. By setting this to true the values of the properties - will be base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the property values. - - - - - - Layout that formats the log events as XML elements compatible with the log4j schema - - - - Formats the log events according to the http://logging.apache.org/log4j schema. - - - Nicko Cadell - - - - The 1st of January 1970 in UTC - - - - - Constructs an XMLLayoutSchemaLog4j - - - - - Constructs an XMLLayoutSchemaLog4j. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Actually do the writing of the xml - - the writer to use - the event to write - - - Generate XML that is compatible with the log4j schema. - - - - - - The version of the log4j schema to use. - - - - Only version 1.2 of the log4j schema is supported. - - - - - - The default object Renderer. - - - - The default renderer supports rendering objects and collections to strings. - - - See the method for details of the output. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface in order to render objects as strings - - - - Certain types require special case conversion to - string form. This conversion is done by an object renderer. - Object renderers implement the - interface. - - - Nicko Cadell - Gert Driesen - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a - string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - - - - Default constructor - - - - Default constructor - - - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - The default renderer supports rendering objects to strings as follows: - - - - Value - Rendered String - - - null - - "(null)" - - - - - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - , & - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: {a, b, c}. - - - All collection classes that implement its subclasses, - or generic equivalents all implement the interface. - - - - - - - - Rendered as the key, an equals sign ('='), and the value (using the appropriate - renderer). - - - For example: key=value. - - - - - other - - Object.ToString() - - - - - - - - Render the array argument into a string - - The map used to lookup renderers - the array to render - The writer to render to - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - - Render the enumerator argument into a string - - The map used to lookup renderers - the enumerator to render - The writer to render to - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - {a, b, c}. - - - - - - Render the DictionaryEntry argument into a string - - The map used to lookup renderers - the DictionaryEntry to render - The writer to render to - - - Render the key, an equals sign ('='), and the value (using the appropriate - renderer). For example: key=value. - - - - - - Map class objects to an . - - - - Maintains a mapping between types that require special - rendering and the that - is used to render them. - - - The method is used to render an - object using the appropriate renderers defined in this map. - - - Nicko Cadell - Gert Driesen - - - - Default Constructor - - - - Default constructor. - - - - - - Render using the appropriate renderer. - - the object to render to a string - the object rendered as a string - - - This is a convenience method used to render an object to a string. - The alternative method - should be used when streaming output to a . - - - - - - Render using the appropriate renderer. - - the object to render to a string - The writer to render to - - - Find the appropriate renderer for the type of the - parameter. This is accomplished by calling the - method. Once a renderer is found, it is - applied on the object and the result is returned - as a . - - - - - - Gets the renderer for the specified object type - - the object to lookup the renderer for - the renderer for - - - Gets the renderer for the specified object type. - - - Syntactic sugar method that calls - with the type of the object parameter. - - - - - - Gets the renderer for the specified type - - the type to lookup the renderer for - the renderer for the specified type - - - Returns the renderer for the specified type. - If no specific renderer has been defined the - will be returned. - - - - - - Internal function to recursively search interfaces - - the type to lookup the renderer for - the renderer for the specified type - - - - Clear the map of renderers - - - - Clear the custom renderers defined by using - . The - cannot be removed. - - - - - - Register an for . - - the type that will be rendered by - the renderer for - - - Register an object renderer for a specific source type. - This renderer will be returned from a call to - specifying the same as an argument. - - - - - - Get the default renderer instance - - the default renderer - - - Get the default renderer - - - - - - Interface implemented by logger repository plugins. - - - - Plugins define additional behavior that can be associated - with a . - The held by the - property is used to store the plugins for a repository. - - - The log4net.Config.PluginAttribute can be used to - attach plugins to repositories created using configuration - attributes. - - - Nicko Cadell - Gert Driesen - - - - Attaches the plugin to the specified . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - - Gets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a PluginCollection instance. - - list to create a readonly wrapper arround - - A PluginCollection wrapper that is read-only. - - - - - Initializes a new instance of the PluginCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the PluginCollection class - that has the specified initial capacity. - - - The number of elements that the new PluginCollection is initially capable of storing. - - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified PluginCollection. - - The PluginCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - - Copies the entire PluginCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire PluginCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the PluginCollection. - - The to be added to the end of the PluginCollection. - The index at which the value has been added. - - - - Removes all elements from the PluginCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the PluginCollection. - - The to check for. - true if is found in the PluginCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the PluginCollection. - - The to locate in the PluginCollection. - - The zero-based index of the first occurrence of - in the entire PluginCollection, if found; otherwise, -1. - - - - - Inserts an element into the PluginCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the PluginCollection. - - The to remove from the PluginCollection. - - The specified was not found in the PluginCollection. - - - - - Removes the element at the specified index of the PluginCollection. - - The zero-based index of the element to remove. - - is less than zero. - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the PluginCollection. - - An for the entire PluginCollection. - - - - Adds the elements of another PluginCollection to the current PluginCollection. - - The PluginCollection whose elements should be added to the end of the current PluginCollection. - The new of the PluginCollection. - - - - Adds the elements of a array to the current PluginCollection. - - The array whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - - Adds the elements of a collection to the current PluginCollection. - - The collection whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - - Sets the capacity to the actual number of elements. - - - - - is less than zero. - -or- - is equal to or greater than . - - - - - is less than zero. - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the PluginCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - An object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - - The at the specified index. - - The zero-based index of the element to get or set. - - is less than zero. - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false. - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false. - - - - Gets or sets the number of elements the PluginCollection can contain. - - - The number of elements the PluginCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - - A value - - - - - Supports simple iteration over a . - - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - - - - Map of repository plugins. - - - - This class is a name keyed map of the plugins that are - attached to a repository. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The repository that the plugins should be attached to. - - - Initialize a new instance of the class with a - repository that the plugins should be attached to. - - - - - - Adds a to the map. - - The to add to the map. - - - The will be attached to the repository when added. - - - If there already exists a plugin with the same name - attached to the repository then the old plugin will - be and replaced with - the new plugin. - - - - - - Removes a from the map. - - The to remove from the map. - - - Remove a specific plugin from this map. - - - - - - Gets a by name. - - The name of the to lookup. - - The from the map with the name specified, or - null if no plugin is found. - - - - Lookup a plugin by name. If the plugin is not found null - will be returned. - - - - - - Gets all possible plugins as a list of objects. - - All possible plugins as a list of objects. - - - Get a collection of all the plugins defined in this map. - - - - - - Base implementation of - - - - Default abstract implementation of the - interface. This base class can be used by implementors - of the interface. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - the name of the plugin - - Initializes a new Plugin with the specified name. - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - - The name of this plugin. - - - - - The repository this plugin is attached to. - - - - - Gets or sets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - The name of the plugin must not change one the - plugin has been attached to a repository. - - - - - - The repository for this plugin - - - The that this plugin is attached to. - - - - Gets or sets the that this plugin is - attached to. - - - - - - Plugin that listens for events from the - - - - This plugin publishes an instance of - on a specified . This listens for logging events delivered from - a remote . - - - When an event is received it is relogged within the attached repository - as if it had been raised locally. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Initializes a new instance of the class. - - - The property must be set. - - - - - - Construct with sink Uri. - - The name to publish the sink under in the remoting infrastructure. - See for more details. - - - Initializes a new instance of the class - with specified name. - - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - When the plugin is shutdown the remote logging - sink is disconnected. - - - - - - Gets or sets the URI of this sink. - - - The URI of this sink. - - - - This is the name under which the object is marshaled. - - - - - - - Delivers objects to a remote sink. - - - - Internal class used to listen for logging events - and deliver them to the local repository. - - - - - - Constructor - - The repository to log to. - - - Initializes a new instance of the for the - specified . - - - - - - Logs the events to the repository. - - The events to log. - - - The events passed are logged to the - - - - - - Obtains a lifetime service object to control the lifetime - policy for this instance. - - null to indicate that this instance should live forever. - - - Obtains a lifetime service object to control the lifetime - policy for this instance. This object should live forever - therefore this implementation returns null. - - - - - - The underlying that events should - be logged to. - - - - - Default implementation of - - - - This default implementation of the - interface is used to create the default subclass - of the object. - - - Nicko Cadell - Gert Driesen - - - - Interface abstracts creation of instances - - - - This interface is used by the to - create new objects. - - - The method is called - to create a named . - - - Implement this interface to create new subclasses of . - - - Nicko Cadell - Gert Driesen - - - - Create a new instance - - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Create a new instance - - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - - Default internal subclass of - - - - This subclass has no additional behavior over the - class but does allow instances - to be created. - - - - - - Implementation of used by - - - - Internal class used to provide implementation of - interface. Applications should use to get - logger instances. - - - This is one of the central classes in the log4net implementation. One of the - distinctive features of log4net are hierarchical loggers and their - evaluation. The organizes the - instances into a rooted tree hierarchy. - - - The class is abstract. Only concrete subclasses of - can be created. The - is used to create instances of this type for the . - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - - - - This constructor created a new instance and - sets its name. - - The name of the . - - - This constructor is protected and designed to be used by - a subclass that is not abstract. - - - Loggers are constructed by - objects. See for the default - logger creator. - - - - - - Add to the list of appenders of this - Logger instance. - - An appender to add to this logger - - - Add to the list of appenders of this - Logger instance. - - - If is already in the list of - appenders, then it won't be added again. - - - - - - Look for the appender named as name - - The name of the appender to lookup - The appender with the name specified, or null. - - - Returns the named appender, or null if the appender is not found. - - - - - - Remove all previously added appenders from this Logger instance. - - - - Remove all previously added appenders from this Logger instance. - - - This is useful when re-reading configuration information. - - - - - - Remove the appender passed as parameter form the list of appenders. - - The appender to remove - The appender removed from the list - - - Remove the appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Remove the appender passed as parameter form the list of appenders. - - The name of the appender to remove - The appender removed from the list - - - Remove the named appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the and . - - - This method must not throw any exception to the caller. - - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - This method must not throw any exception to the caller. - - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - This method must not throw any exception to the caller. - - - - - - Deliver the to the attached appenders. - - The event to log. - - - Call the appenders in the hierarchy starting at - this. If no appenders could be found, emit a - warning. - - - This method calls all the appenders inherited from the - hierarchy circumventing any evaluation of whether to log or not - to log the particular log request. - - - - - - Closes all attached appenders implementing the interface. - - - - Used to ensure that the appenders are correctly shutdown. - - - - - - This is the most generic printing method. This generic form is intended to be used by wrappers - - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the . - - - - - - Creates a new logging event and logs the event without further checks. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generates a logging event and delivers it to the attached - appenders. - - - - - - Creates a new logging event and logs the event without further checks. - - The event being logged. - - - Delivers the logging event to the attached appenders. - - - - - - The fully qualified type of the Logger class. - - - - - The name of this logger. - - - - - The assigned level of this logger. - - - - The level variable need not be - assigned a value in which case it is inherited - form the hierarchy. - - - - - - The parent of this logger. - - - - The parent of this logger. - All loggers have at least one ancestor which is the root logger. - - - - - - Loggers need to know what Hierarchy they are in. - - - - Loggers need to know what Hierarchy they are in. - The hierarchy that this logger is a member of is stored - here. - - - - - - Helper implementation of the interface - - - - - Flag indicating if child loggers inherit their parents appenders - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - - Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl - - - - - Gets or sets the parent logger in the hierarchy. - - - The parent logger in the hierarchy. - - - - Part of the Composite pattern that makes the hierarchy. - The hierarchy is parent linked rather than child linked. - - - - - - Gets or sets a value indicating if child loggers inherit their parent's appenders. - - - true if child loggers inherit their parent's appenders. - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - - Gets the effective level for this logger. - - The nearest level in the logger hierarchy. - - - Starting from this logger, searches the logger hierarchy for a - non-null level and returns it. Otherwise, returns the level of the - root logger. - - The Logger class is designed so that this method executes as - quickly as possible. - - - - - Gets or sets the where this - Logger instance is attached to. - - The hierarchy that this logger belongs to. - - - This logger must be attached to a single . - - - - - - Gets or sets the assigned , if any, for this Logger. - - - The of this logger. - - - - The assigned can be null. - - - - - - Get the appenders contained in this logger as an - . - - A collection of the appenders in this logger - - - Get the appenders contained in this logger as an - . If no appenders - can be found, then a is returned. - - - - - - Gets the logger name. - - - The name of the logger. - - - - The name of this logger - - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - - Construct a new Logger - - the name of the logger - - - Initializes a new instance of the class - with the specified name. - - - - - - Delegate used to handle logger creation event notifications. - - The in which the has been created. - The event args that hold the instance that has been created. - - - Delegate used to handle logger creation event notifications. - - - - - - Provides data for the event. - - - - A event is raised every time a - is created. - - - - - - The created - - - - - Constructor - - The that has been created. - - - Initializes a new instance of the event argument - class,with the specified . - - - - - - Gets the that has been created. - - - The that has been created. - - - - The that has been created. - - - - - - Hierarchical organization of loggers - - - - The casual user should not have to deal with this class - directly. - - - This class is specialized in retrieving loggers by name and - also maintaining the logger hierarchy. Implements the - interface. - - - The structure of the logger hierarchy is maintained by the - method. The hierarchy is such that children - link to their parent but parents do not have any references to their - children. Moreover, loggers can be instantiated in any order, in - particular descendant before ancestor. - - - In case a descendant is created before a particular ancestor, - then it creates a provision node for the ancestor and adds itself - to the provision node. Other descendants of the same ancestor add - themselves to the previously created provision node. - - - Nicko Cadell - Gert Driesen - - - - Base implementation of - - - - Default abstract implementation of the interface. - - - Skeleton implementation of the interface. - All types can extend this type. - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by logger repositories. - - - - This interface is implemented by logger repositories. e.g. - . - - - This interface is used by the - to obtain interfaces. - - - Nicko Cadell - Gert Driesen - - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - The name of the logger to lookup - The Logger object with the name specified - - - If the names logger exists it is returned, otherwise - null is returned. - - - - - - Returns all the currently defined loggers as an Array. - - All the defined loggers - - - Returns all the currently defined loggers as an Array. - - - - - - Returns a named logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Returns a named logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - Shutdown the repository - - - Shutting down a repository will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - - The name of the repository - - - The name of the repository - - - - The name of the repository. - - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository. - - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - - Repository specific properties - - - Repository specific properties - - - - These properties can be specified on a repository specific basis. - - - - - - Default Constructor - - - - Initializes the repository with default (empty) properties. - - - - - - Construct the repository using specific properties - - the properties to set for this repository - - - Initializes the repository with specified properties. - - - - - - Test if logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - - - - - Returns all the currently defined loggers in the repository - - All the defined loggers - - - Returns all the currently defined loggers in the repository as an Array. - - - - - - Return a new logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Return a new logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - - Shutdown the repository - - - - Shutdown the repository. Can be overridden in a subclass. - This base class implementation notifies the - listeners and all attached plugins of the shutdown event. - - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the logEvent through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - - Adds an object renderer for a specific class. - - The type that will be rendered by the renderer supplied. - The object renderer used to render the object. - - - Adds an object renderer for a specific class. - - - - - - Notify the registered listeners that the repository is shutting down - - Empty EventArgs - - - Notify any listeners that this repository is shutting down. - - - - - - Notify the registered listeners that the repository has had its configuration reset - - Empty EventArgs - - - Notify any listeners that this repository's configuration has been reset. - - - - - - Notify the registered listeners that the repository has had its configuration changed - - Empty EventArgs - - - Notify any listeners that this repository's configuration has changed. - - - - - - Raise a configuration changed event on this repository - - EventArgs.Empty - - - Applications that programmatically change the configuration of the repository should - raise this event notification to notify listeners. - - - - - - The name of the repository - - - The string name of the repository - - - - The name of this repository. The name is - used to store and lookup the repositories - stored by the . - - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository - - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - - Repository specific properties - - - Repository specific properties - - - These properties can be specified on a repository specific basis - - - - - Basic Configurator interface for repositories - - - - Interface used by basic configurator to configure a - with a default . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - - Initialize the repository using the specified appender - - the appender to use to log all logging events - - - Configure the repository to route all logging events to the - specified appender. - - - - - - Configure repository using XML - - - - Interface used by Xml configurator to configure a . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - - Initialize the repository using the specified config - - the element containing the root of the config - - - The schema for the XML configuration data is defined by - the implementation. - - - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Construct with properties - - The properties to pass to this repository. - - - Initializes a new instance of the class. - - - - - - Construct with a logger factory - - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - - Construct with properties and a logger factory - - The properties to pass to this repository. - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - - Test if a logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the hierarchy. If so return - its reference, otherwise returns null. - - - - - - Returns all the currently defined loggers in the hierarchy as an Array - - All the defined loggers - - - Returns all the currently defined loggers in the hierarchy as an Array. - The root logger is not included in the returned - enumeration. - - - - - - Return a new logger instance named as the first parameter using - the default factory. - - - - Return a new logger instance named as the first parameter using - the default factory. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - The name of the logger to retrieve - The logger object with the name specified - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The Shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Reset all values contained in this hierarchy instance to their default. - - - - Reset all values contained in this hierarchy instance to their - default. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the logEvent through this hierarchy. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are currently configured - - An array containing all the currently configured appenders - - - Returns all the instances that are currently configured. - All the loggers are searched for appenders. The appenders may also be containers - for appenders and these are also searched for additional loggers. - - - The list returned is unordered but does not contain duplicates. - - - - - - Collect the appenders from an . - The appender may also be a container. - - - - - - - Collect the appenders from an container - - - - - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - - Test if this hierarchy is disabled for the specified . - - The level to check against. - - true if the repository is disabled for the level argument, false otherwise. - - - - If this hierarchy has not been configured then this method will - always return true. - - - This method will return true if this repository is - disabled for level object passed as parameter and - false otherwise. - - - See also the property. - - - - - - Clear all logger definitions from the internal hashtable - - - - This call will clear all logger definitions from the internal - hashtable. Invoking this method will irrevocably mess up the - logger hierarchy. - - - You should really know what you are doing before - invoking this method. - - - - - - Return a new logger instance named as the first parameter using - . - - The name of the logger to retrieve - The factory that will make the new logger instance - The logger object with the name specified - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated by the - parameter and linked with its existing - ancestors as well as children. - - - - - - Sends a logger creation event to all registered listeners - - The newly created logger - - Raises the logger creation event. - - - - - Updates all the parents of the specified logger - - The logger to update the parents for - - - This method loops through all the potential parents of - . There 3 possible cases: - - - - No entry for the potential parent of exists - - We create a ProvisionNode for this potential - parent and insert in that provision node. - - - - The entry is of type Logger for the potential parent. - - The entry is 's nearest existing parent. We - update 's parent field with this entry. We also break from - he loop because updating our parent's parent is our parent's - responsibility. - - - - The entry is of type ProvisionNode for this potential parent. - - We add to the list of children for this - potential parent. - - - - - - - - Replace a with a in the hierarchy. - - - - - - We update the links for all the children that placed themselves - in the provision node 'pn'. The second argument 'log' is a - reference for the newly created Logger, parent of all the - children in 'pn'. - - - We loop on all the children 'c' in 'pn'. - - - If the child 'c' has been already linked to a child of - 'log' then there is no need to update 'c'. - - - Otherwise, we set log's parent field to c's parent and set - c's parent field to log. - - - - - - Define or redefine a Level using the values in the argument - - the level values - - - Define or redefine a Level using the values in the argument - - - Supports setting levels via the configuration file. - - - - - - Set a Property using the values in the argument - - the property value - - - Set a Property using the values in the argument. - - - Supports setting property values via the configuration file. - - - - - - Event used to notify that a logger has been created. - - - - Event raised when a logger is created. - - - - - - Has no appender warning been emitted - - - - Flag to indicate if we have already issued a warning - about not having an appender warning. - - - - - - Get the root of this hierarchy - - - - Get the root of this hierarchy. - - - - - - Gets or sets the default instance. - - The default - - - The logger factory is used to create logger instances. - - - - - - A class to hold the value, name and display name for a level - - - - A class to hold the value, name and display name for a level - - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - - Value of the level - - - - If the value is not set (defaults to -1) the value will be looked - up for the current level with the same name. - - - - - - Name of the level - - - The name of the level - - - - The name of the level. - - - - - - Display name for the level - - - The display name of the level - - - - The display name of the level. - - - - - - A class to hold the key and data for a property set in the config file - - - - A class to hold the key and data for a property set in the config file - - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - - Property Key - - - Property Key - - - - Property Key. - - - - - - Property Value - - - Property Value - - - - Property Value. - - - - - - Used internally to accelerate hash table searches. - - - - Internal class used to improve performance of - string keyed hashtables. - - - The hashcode of the string is cached for reuse. - The string is stored as an interned value. - When comparing two objects for equality - the reference equality of the interned strings is compared. - - - Nicko Cadell - Gert Driesen - - - - Construct key with string name - - - - Initializes a new instance of the class - with the specified name. - - - Stores the hashcode of the string and interns - the string key to optimize comparisons. - - - The Compact Framework 1.0 the - method does not work. On the Compact Framework - the string keys are not interned nor are they - compared by reference. - - - The name of the logger. - - - - Returns a hash code for the current instance. - - A hash code for the current instance. - - - Returns the cached hashcode. - - - - - - Determines whether two instances - are equal. - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - Compares the references of the interned strings. - - - - - - Provision nodes are used where no logger instance has been specified - - - - instances are used in the - when there is no specified - for that node. - - - A provision node holds a list of child loggers on behalf of - a logger that does not exist. - - - Nicko Cadell - Gert Driesen - - - - Create a new provision node with child node - - A child logger to add to this node. - - - Initializes a new instance of the class - with the specified child logger. - - - - - - The sits at the root of the logger hierarchy tree. - - - - The is a regular except - that it provides several guarantees. - - - First, it cannot be assigned a null - level. Second, since the root logger cannot have a parent, the - property always returns the value of the - level field without walking the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Construct a - - The level to assign to the root logger. - - - Initializes a new instance of the class with - the specified logging level. - - - The root logger names itself as "root". However, the root - logger cannot be retrieved by name. - - - - - - Gets the assigned level value without walking the logger hierarchy. - - The assigned level value without walking the logger hierarchy. - - - Because the root logger cannot have a parent and its level - must not be null this property just returns the - value of . - - - - - - Gets or sets the assigned for the root logger. - - - The of the root logger. - - - - Setting the level of the root logger to a null reference - may have catastrophic results. We prevent this here. - - - - - - Initializes the log4net environment using an XML DOM. - - - - Configures a using an XML DOM. - - - Nicko Cadell - Gert Driesen - - - - Construct the configurator for a hierarchy - - The hierarchy to build. - - - Initializes a new instance of the class - with the specified . - - - - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - The root element to parse. - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - - - - - Parse appenders by IDREF. - - The appender ref element. - The instance of the appender that the ref refers to. - - - Parse an XML element that represents an appender and return - the appender. - - - - - - Parses an appender element. - - The appender element. - The appender instance or null when parsing failed. - - - Parse an XML element that represents an appender and return - the appender instance. - - - - - - Parses a logger element. - - The logger element. - - - Parse an XML element that represents a logger. - - - - - - Parses the root logger element. - - The root element. - - - Parse an XML element that represents the root logger. - - - - - - Parses the children of a logger element. - - The category element. - The logger instance. - Flag to indicate if the logger is the root logger. - - - Parse the child elements of a <logger> element. - - - - - - Parses an object renderer. - - The renderer element. - - - Parse an XML element that represents a renderer. - - - - - - Parses a level element. - - The level element. - The logger object to set the level on. - Flag to indicate if the logger is the root logger. - - - Parse an XML element that represents a level. - - - - - - Sets a parameter on an object. - - The parameter element. - The object to set the parameter on. - - The parameter name must correspond to a writable property - on the object. The value of the parameter is a string, - therefore this function will attempt to set a string - property first. If unable to set a string property it - will inspect the property and its argument type. It will - attempt to call a static method called Parse on the - type of the property. This method will take a single - string argument and return a value that can be used to - set the property. - - - - - Test if an element has no attributes or child elements - - the element to inspect - true if the element has any attributes or child elements, false otherwise - - - - Test if a is constructible with Activator.CreateInstance. - - the type to inspect - true if the type is creatable using a default constructor, false otherwise - - - - Look for a method on the that matches the supplied - - the type that has the method - the name of the method - the method info found - - - The method must be a public instance method on the . - The method must be named or "Add" followed by . - The method must take a single parameter. - - - - - - Converts a string value to a target type. - - The type of object to convert the string to. - The string value to use as the value of the object. - - - An object of type with value or - null when the conversion could not be performed. - - - - - - Creates an object as specified in XML. - - The XML element that contains the definition of the object. - The object type to use if not explicitly specified. - The type that the returned object must be or must inherit from. - The object or null - - - Parse an XML element and create an object instance based on the configuration - data. - - - The type of the instance may be specified in the XML. If not - specified then the is used - as the type. However the type is specified it must support the - type. - - - - - - key: appenderName, value: appender. - - - - - The Hierarchy being configured. - - - - - Delegate used to handle logger repository shutdown event notifications - - The that is shutting down. - Empty event args - - - Delegate used to handle logger repository shutdown event notifications. - - - - - - Delegate used to handle logger repository configuration reset event notifications - - The that has had its configuration reset. - Empty event args - - - Delegate used to handle logger repository configuration reset event notifications. - - - - - - Delegate used to handle event notifications for logger repository configuration changes. - - The that has had its configuration changed. - Empty event arguments. - - - Delegate used to handle event notifications for logger repository configuration changes. - - - - - - Write the name of the current AppDomain to the output - - - - Write the name of the current AppDomain to the output writer - - - Nicko Cadell - - - - Write the name of the current AppDomain to the output - - the writer to write to - null, state is not set - - - Writes name of the current AppDomain to the output . - - - - - - Write the current date to the output - - - - Date pattern converter, uses a to format - the current date and time to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the - method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - - The date and time is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write the current date to the output - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date and time passed is in the local time zone. - - - - - - Write an environment variable to the output - - - - Write an environment variable to the output writer. - The value of the determines - the name of the variable to output. - - - Nicko Cadell - - - - Write an environment variable to the output - - the writer to write to - null, state is not set - - - Writes the environment variable to the output . - The name of the environment variable to output must be set - using the - property. - - - - - - Write the current thread identity to the output - - - - Write the current thread identity to the output writer - - - Nicko Cadell - - - - Write the current thread identity to the output - - the writer to write to - null, state is not set - - - Writes the current thread identity to the output . - - - - - - Pattern converter for literal string instances in the pattern - - - - Writes the literal string value specified in the - property to - the output. - - - Nicko Cadell - - - - Set the next converter in the chain - - The next pattern converter in the chain - The next pattern converter - - - Special case the building of the pattern converter chain - for instances. Two adjacent - literals in the pattern can be represented by a single combined - pattern converter. This implementation detects when a - is added to the chain - after this converter and combines its value with this converter's - literal value. - - - - - - Write the literal to the output - - the writer to write to - null, not set - - - Override the formatting behavior to ignore the FormattingInfo - because we have a literal instead. - - - Writes the value of - to the output . - - - - - - Convert this pattern into the rendered message - - that will receive the formatted result. - null, not set - - - This method is not used. - - - - - - Writes a newline to the output - - - - Writes the system dependent line terminator to the output. - This behavior can be overridden by setting the : - - - - Option Value - Output - - - DOS - DOS or Windows line terminator "\r\n" - - - UNIX - UNIX line terminator "\n" - - - - Nicko Cadell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write the current process ID to the output - - - - Write the current process ID to the output writer - - - Nicko Cadell - - - - Write the current process ID to the output - - the writer to write to - null, state is not set - - - Write the current process ID to the output . - - - - - - Property pattern converter - - - - This pattern converter reads the thread and global properties. - The thread properties take priority over global properties. - See for details of the - thread properties. See for - details of the global properties. - - - If the is specified then that will be used to - lookup a single property. If no is specified - then all properties will be dumped as a list of key value pairs. - - - Nicko Cadell - - - - Write the property value to the output - - that will receive the formatted result. - null, state is not set - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - - A Pattern converter that generates a string of random characters - - - - The converter generates a string of random characters. By default - the string is length 4. This can be changed by setting the - to the string value of the length required. - - - The random characters in the string are limited to uppercase letters - and numbers only. - - - The random number generator used by this class is not cryptographically secure. - - - Nicko Cadell - - - - Shared random number generator - - - - - Length of random string to generate. Default length 4. - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write a randoim string to the output - - the writer to write to - null, state is not set - - - Write a randoim string to the output . - - - - - - Write the current threads username to the output - - - - Write the current threads username to the output writer - - - Nicko Cadell - - - - Write the current threads username to the output - - the writer to write to - null, state is not set - - - Write the current threads username to the output . - - - - - - Write the UTC date time to the output - - - - Date pattern converter, uses a to format - the current date and time in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - - Write the current date and time to the output - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date is in Universal time when it is rendered. - - - - - - - Type converter for Boolean. - - - - Supports conversion from string to bool type. - - - - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Exception base type for conversion errors. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class - with the specified message. - - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - - Serialization constructor - - 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 class - with serialized data. - - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - An instance of the . - - - Creates a new instance of the class. - - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - A nested exception to include. - An instance of the . - - - Creates a new instance of the class. - - - - - - Register of type converters for specific types. - - - - Maintains a registry of type converters used to convert between - types. - - - Use the and - methods to register new converters. - The and methods - lookup appropriate converters to use. - - - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - Initializes a new instance of the class. - - - - - Static constructor. - - - - This constructor defines the intrinsic type converters. - - - - - - Adds a converter for a specific type. - - The type being converted to. - The type converter to use to convert to the destination type. - - - Adds a converter instance for a specific type. - - - - - - Adds a converter for a specific type. - - The type being converted to. - The type of the type converter to use to convert to the destination type. - - - Adds a converter for a specific type. - - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted from. - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - - Lookups the type converter to use as specified by the attributes on the - destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - - Creates the instance of the type converter. - - The type of the type converter. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - The type specified for the type converter must implement - the or interfaces - and must have a public default (no argument) constructor. - - - - - - Mapping from to type converter. - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an encoding - the encoding - - - Uses the method to - convert the argument to an . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Interface supported by type converters - - - - This interface supports conversion from a single type to arbitrary types. - See . - - - Nicko Cadell - - - - Returns whether this converter can convert the object to the specified type - - A Type that represents the type you want to convert to - true if the conversion is possible - - - Test if the type supported by this converter can be converted to the - . - - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Converts the (which must be of the type supported - by this converter) to the specified.. - - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an IPAddress - the IPAddress - - - Uses the method to convert the - argument to an . - If that fails then the string is resolved as a DNS hostname. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternLayout - the PatternLayout - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Convert between string and - - - - Supports conversion from string to type, - and from a type to a string. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - - Can the target type be converted to the type supported by this object - - A that represents the type you want to convert to - true if the conversion is possible - - - Returns true if the is - assignable from a type. - - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - . To check for this condition use the - method. - - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternString - the PatternString - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a Type - the Type - - - Uses the method to convert the - argument to a . - Additional effort is made to locate partially specified types - by searching the loaded assemblies. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Attribute used to associate a type converter - - - - Class and Interface level attribute that specifies a type converter - to use with the associated type. - - - To associate a type converter with a target type apply a - TypeConverterAttribute to the target type. Specify the - type of the type converter on the attribute. - - - Nicko Cadell - Gert Driesen - - - - The string type name of the type converter - - - - - Default constructor - - - - Default constructor - - - - - - Create a new type converter attribute for the specified type name - - The string type name of the type converter - - - The type specified must implement the - or the interfaces. - - - - - - Create a new type converter attribute for the specified type - - The type of the type converter - - - The type specified must implement the - or the interfaces. - - - - - - The string type name of the type converter - - - The string type name of the type converter - - - - The type specified must implement the - or the interfaces. - - - - - - A straightforward implementation of the interface. - - - - This is the default implementation of the - interface. Implementors of the interface - should aggregate an instance of this type. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Append on on all attached appenders. - - The event being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - - Append on on all attached appenders. - - The array of events being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - - Calls the DoAppende method on the with - the objects supplied. - - The appender - The events - - - If the supports the - interface then the will be passed - through using that interface. Otherwise the - objects in the array will be passed one at a time. - - - - - - Attaches an appender. - - The appender to add. - - - If the appender is already in the list it won't be added again. - - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Lookup an attached appender by name. - - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - List of appenders - - - - - Array of appenders, used to cache the m_appenderList - - - - - Gets all attached appenders. - - - A collection of attached appenders, or null if there - are no attached appenders. - - - - The read only collection of all currently attached appenders. - - - - - - This class aggregates several PropertiesDictionary collections together. - - - - Provides a dictionary style lookup over an ordered list of - collections. - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Add a Properties Dictionary to this composite collection - - the properties to add - - - Properties dictionaries added first take precedence over dictionaries added - later. - - - - - - Flatten this composite collection into a single properties dictionary - - the flattened dictionary - - - Reduces the collection of ordered dictionaries to a single dictionary - containing the resultant values for the keys. - - - - - - Gets the value of a property - - - The value for the property with the specified key - - - - Looks up the value for the specified. - The collections are searched - in the order in which they were added to this collection. The value - returned is the value held by the first collection that contains - the specified key. - - - If none of the collections contain the specified key then - null is returned. - - - - - - Base class for Context Properties implementations - - - - This class defines a basic property get set accessor - - - Nicko Cadell - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - - Subclass of that maintains a count of - the number of bytes written. - - - - This writer counts the number of bytes written. - - - Nicko Cadell - Gert Driesen - - - - that does not leak exceptions - - - - does not throw exceptions when things go wrong. - Instead, it delegates error handling to its . - - - Nicko Cadell - Gert Driesen - - - - Adapter that extends and forwards all - messages to an instance of . - - - - Adapter that extends and forwards all - messages to an instance of . - - - Nicko Cadell - - - - The writer to forward messages to - - - - - Create an instance of that forwards all - messages to a . - - The to forward to - - - Create an instance of that forwards all - messages to a . - - - - - - Closes the writer and releases any system resources associated with the writer - - - - - - - - - Dispose this writer - - flag indicating if we are being disposed - - - Dispose this writer - - - - - - Flushes any buffered output - - - - Clears all buffers for the writer and causes any buffered data to be written - to the underlying device - - - - - - Writes a character to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a character to the wrapped TextWriter - - - - - - Writes a character buffer to the wrapped TextWriter - - the data buffer - the start index - the number of characters to write - - - Writes a character buffer to the wrapped TextWriter - - - - - - Writes a string to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a string to the wrapped TextWriter - - - - - - Gets or sets the underlying . - - - The underlying . - - - - Gets or sets the underlying . - - - - - - The Encoding in which the output is written - - - The - - - - The Encoding in which the output is written - - - - - - Gets an object that controls formatting - - - The format provider - - - - Gets an object that controls formatting - - - - - - Gets or sets the line terminator string used by the TextWriter - - - The line terminator to use - - - - Gets or sets the line terminator string used by the TextWriter - - - - - - Constructor - - the writer to actually write to - the error handler to report error to - - - Create a new QuietTextWriter using a writer and error handler - - - - - - Writes a character to the underlying writer - - the char to write - - - Writes a character to the underlying writer - - - - - - Writes a buffer to the underlying writer - - the buffer to write - the start index to write from - the number of characters to write - - - Writes a buffer to the underlying writer - - - - - - Writes a string to the output. - - The string data to write to the output. - - - Writes a string to the output. - - - - - - Closes the underlying output writer. - - - - Closes the underlying output writer. - - - - - - The error handler instance to pass all errors to - - - - - Flag to indicate if this writer is closed - - - - - Gets or sets the error handler that all errors are passed to. - - - The error handler that all errors are passed to. - - - - Gets or sets the error handler that all errors are passed to. - - - - - - Gets a value indicating whether this writer is closed. - - - true if this writer is closed, otherwise false. - - - - Gets a value indicating whether this writer is closed. - - - - - - Constructor - - The to actually write to. - The to report errors to. - - - Creates a new instance of the class - with the specified and . - - - - - - Writes a character to the underlying writer and counts the number of bytes written. - - the char to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Writes a buffer to the underlying writer and counts the number of bytes written. - - the buffer to write - the start index to write from - the number of characters to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Writes a string to the output and counts the number of bytes written. - - The string data to write to the output. - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Total number of bytes written. - - - - - Gets or sets the total number of bytes written. - - - The total number of bytes written. - - - - Gets or sets the total number of bytes written. - - - - - - A fixed size rolling buffer of logging events. - - - - An array backed fixed size leaky bucket. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The maximum number of logging events in the buffer. - - - Initializes a new instance of the class with - the specified maximum number of buffered logging events. - - - The argument is not a positive integer. - - - - Appends a to the buffer. - - The event to append to the buffer. - The event discarded from the buffer, if the buffer is full, otherwise null. - - - Append an event to the buffer. If the buffer still contains free space then - null is returned. If the buffer is full then an event will be dropped - to make space for the new event, the event dropped is returned. - - - - - - Get and remove the oldest event in the buffer. - - The oldest logging event in the buffer - - - Gets the oldest (first) logging event in the buffer and removes it - from the buffer. - - - - - - Pops all the logging events from the buffer into an array. - - An array of all the logging events in the buffer. - - - Get all the events in the buffer and clear the buffer. - - - - - - Clear the buffer - - - - Clear the buffer of all events. The events in the buffer are lost. - - - - - - Gets the th oldest event currently in the buffer. - - The th oldest event currently in the buffer. - - - If is outside the range 0 to the number of events - currently in the buffer, then null is returned. - - - - - - Gets the maximum size of the buffer. - - The maximum size of the buffer. - - - Gets the maximum size of the buffer - - - - - - Gets the number of logging events in the buffer. - - The number of logging events in the buffer. - - - This number is guaranteed to be in the range 0 to - (inclusive). - - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - The singleton instance of the empty collection. - - - - - Gets the singleton instance of the empty collection. - - The singleton instance of the empty collection. - - - Gets the singleton instance of the empty collection. - - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - Adds an element with the provided key and value to the - . - - The to use as the key of the element to add. - The to use as the value of the element to add. - - - As the collection is empty no new values can be added. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - Removes all elements from the . - - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - Determines whether the contains an element - with the specified key. - - The key to locate in the . - false - - - As the collection is empty the method always returns false. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - The singleton instance of the empty dictionary. - - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - - Gets the number of elements contained in the - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - - Gets a value indicating whether the has a fixed size. - - true - - - As the collection is empty always returns true. - - - - - - Gets a value indicating whether the is read-only. - - true - - - As the collection is empty always returns true. - - - - - - Gets an containing the keys of the . - - An containing the keys of the . - - - As the collection is empty a is returned. - - - - - - Gets an containing the values of the . - - An containing the values of the . - - - As the collection is empty a is returned. - - - - - - Gets or sets the element with the specified key. - - The key of the element to get or set. - null - - - As the collection is empty no values can be looked up or stored. - If the index getter is called then null is returned. - A is thrown if the setter is called. - - - This dictionary is always empty and cannot be modified. - - - - Contain the information obtained when parsing formatting modifiers - in conversion modifiers. - - - - Holds the formatting information extracted from the format string by - the . This is used by the - objects when rendering the output. - - - Nicko Cadell - Gert Driesen - - - - Defaut Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - - - Initializes a new instance of the class - with the specified parameters. - - - - - - Gets or sets the minimum value. - - - The minimum value. - - - - Gets or sets the minimum value. - - - - - - Gets or sets the maximum value. - - - The maximum value. - - - - Gets or sets the maximum value. - - - - - - Gets or sets a flag indicating whether left align is enabled - or not. - - - A flag indicating whether left align is enabled or not. - - - - Gets or sets a flag indicating whether left align is enabled or not. - - - - - - Implementation of Properties collection for the - - - - This class implements a properties collection that is thread safe and supports both - storing properties and capturing a read only copy of the current propertied. - - - This class is optimized to the scenario where the properties are read frequently - and are modified infrequently. - - - Nicko Cadell - - - - The read only copy of the properties. - - - - This variable is declared volatile to prevent the compiler and JIT from - reordering reads and writes of this thread performed on different threads. - - - - - - Lock object used to synchronize updates within this instance - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property from the global context - - the key for the entry to remove - - - Removing an entry from the global context properties is relatively expensive compared - with reading a value. - - - - - - Clear the global context properties - - - - - Get a readonly immutable copy of the properties - - the current global context properties - - - This implementation is fast because the GlobalContextProperties class - stores a readonly copy of the properties. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Reading the value for a key is faster than setting the value. - When the value is written a new read only copy of - the properties is created. - - - - - - Manages a mapping from levels to - - - - Manages an ordered mapping from instances - to subclasses. - - - Nicko Cadell - - - - Default constructor - - - - Initialise a new instance of . - - - - - - Add a to this mapping - - the entry to add - - - If a has previously been added - for the same then that entry will be - overwritten. - - - - - - Lookup the mapping for the specified level - - the level to lookup - the for the level or null if no mapping found - - - Lookup the value for the specified level. Finds the nearest - mapping value for the level that is equal to or less than the - specified. - - - If no mapping could be found then null is returned. - - - - - - Initialize options - - - - Caches the sorted list of in an array - - - - - - Implementation of Properties collection for the - - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property - - the key for the entry to remove - - - Remove the value for the specified from the context. - - - - - - Clear all the context properties - - - - Clear all the context properties - - - - - - Get the PropertiesDictionary stored in the LocalDataStoreSlot for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doings so. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Get or set the property value for the specified. - - - - - - Outputs log statements from within the log4net assembly. - - - - Log4net components cannot make log4net logging calls. However, it is - sometimes useful for the user to learn about what log4net is - doing. - - - All log4net internal debug calls go to the standard output stream - whereas internal error messages are sent to the standard error output - stream. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Static constructor that initializes logging by reading - settings from the application configuration file. - - - - The log4net.Internal.Debug application setting - controls internal debugging. This setting should be set - to true to enable debugging. - - - The log4net.Internal.Quiet application setting - suppresses all internal logging including error messages. - This setting should be set to true to enable message - suppression. - - - - - - Writes log4net internal debug messages to the - standard output stream. - - The message to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - - Writes log4net internal debug messages to the - standard output stream. - - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - - Writes log4net internal warning messages to the - standard error stream. - - The message to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - - Writes log4net internal warning messages to the - standard error stream. - - The message to log. - An exception to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - - Writes log4net internal error messages to the - standard error stream. - - The message to log. - - - All internal error messages are prepended with - the string "log4net:ERROR ". - - - - - - Writes log4net internal error messages to the - standard error stream. - - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net:ERROR ". - - - - - - Writes output to the standard output stream. - - The message to log. - - - Writes to both Console.Out and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - - Writes output to the standard error stream. - - The message to log. - - - Writes to both Console.Error and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - - Default debug level - - - - - In quietMode not even errors generate any output. - - - - - Gets or sets a value indicating whether log4net internal logging - is enabled or disabled. - - - true if log4net internal logging is enabled, otherwise - false. - - - - When set to true, internal debug level logging will be - displayed. - - - This value can be set by setting the application setting - log4net.Internal.Debug in the application configuration - file. - - - The default value is false, i.e. debugging is - disabled. - - - - - The following example enables internal debugging using the - application configuration file : - - - - - - - - - - - - - Gets or sets a value indicating whether log4net should generate no output - from internal logging, not even for errors. - - - true if log4net should generate no output at all from internal - logging, otherwise false. - - - - When set to true will cause internal logging at all levels to be - suppressed. This means that no warning or error reports will be logged. - This option overrides the setting and - disables all debug also. - - This value can be set by setting the application setting - log4net.Internal.Quiet in the application configuration file. - - - The default value is false, i.e. internal logging is not - disabled. - - - - The following example disables internal logging using the - application configuration file : - - - - - - - - - - - - Test if LogLog.Debug is enabled for output. - - - true if Debug is enabled - - - - Test if LogLog.Debug is enabled for output. - - - - - - Test if LogLog.Warn is enabled for output. - - - true if Warn is enabled - - - - Test if LogLog.Warn is enabled for output. - - - - - - Test if LogLog.Error is enabled for output. - - - true if Error is enabled - - - - Test if LogLog.Error is enabled for output. - - - - - - Represents a native error code and message. - - - - Represents a Win32 platform native error. - - - Nicko Cadell - Gert Driesen - - - - Create an instance of the class with the specified - error number and message. - - The number of the native error. - The message of the native error. - - - Create an instance of the class with the specified - error number and message. - - - - - - Create a new instance of the class for the last Windows error. - - - An instance of the class for the last windows error. - - - - The message for the error number is lookup up using the - native Win32 FormatMessage function. - - - - - - Create a new instance of the class. - - the error number for the native error - - An instance of the class for the specified - error number. - - - - The message for the specified error number is lookup up using the - native Win32 FormatMessage function. - - - - - - Retrieves the message corresponding with a Win32 message identifier. - - Message identifier for the requested message. - - The message corresponding with the specified message identifier. - - - - The message will be searched for in system message-table resource(s) - using the native FormatMessage function. - - - - - - Return error information string - - error information string - - - Return error information string - - - - - - Formats a message string. - - Formatting options, and how to interpret the parameter. - Location of the message definition. - Message identifier for the requested message. - Language identifier for the requested message. - If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . - If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. - Pointer to an array of values that are used as insert values in the formatted message. - - - The function requires a message definition as input. The message definition can come from a - buffer passed into the function. It can come from a message table resource in an - already-loaded module. Or the caller can ask the function to search the system's message - table resource(s) for the message definition. The function finds the message definition - in a message table resource based on a message identifier and a language identifier. - The function copies the formatted message text to an output buffer, processing any embedded - insert sequences if requested. - - - To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. - - - - - If the function succeeds, the return value is the number of TCHARs stored in the output - buffer, excluding the terminating null character. - - - If the function fails, the return value is zero. To get extended error information, - call . - - - - - - Gets the number of the native error. - - - The number of the native error. - - - - Gets the number of the native error. - - - - - - Gets the message of the native error. - - - The message of the native error. - - - - - Gets the message of the native error. - - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Test if the enumerator can advance, if so advance. - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - - The singleton instance of the . - - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current key from the enumerator. - - - Throws an exception because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current value from the enumerator. - - The current value from the enumerator. - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current entry from the enumerator. - - - Throws an because the - never has a current entry. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Test if the enumerator can advance, if so advance - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - - The singleton instance of the . - - - - - Get the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - A SecurityContext used when a SecurityContext is not required - - - - The is a no-op implementation of the - base class. It is used where a - is required but one has not been provided. - - - Nicko Cadell - - - - Singleton instance of - - - - Singleton instance of - - - - - - Private constructor - - - - Private constructor for singleton pattern. - - - - - - Impersonate this SecurityContext - - State supplied by the caller - null - - - No impersonation is done and null is always returned. - - - - - - Implements log4net's default error handling policy which consists - of emitting a message for the first error in an appender and - ignoring all subsequent errors. - - - - The error message is printed on the standard error output stream. - - - This policy aims at protecting an otherwise working application - from being flooded with error messages when logging fails. - - - Nicko Cadell - Gert Driesen - - - - Default Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - The prefix to use for each message. - - - Initializes a new instance of the class - with the specified prefix. - - - - - - Log an Error - - The error message. - The exception. - The internal error code. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - - Log an Error - - The error message. - The exception. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - - Log an error - - The error message. - - - Print a the error message passed as parameter on the standard - error output stream. - - - - - - Flag to indicate if it is the first error - - - - - String to prefix each message with - - - - - Is error logging enabled - - - - Is error logging enabled. Logging is only enabled for the - first error delivered to the . - - - - - - A convenience class to convert property values to specific types. - - - - Utility functions for converting types and parsing values. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Converts a string to a value. - - String to convert. - The default value. - The value of . - - - If is "true", then true is returned. - If is "false", then false is returned. - Otherwise, is returned. - - - - - - Parses a file size into a number. - - String to parse. - The default value. - The value of . - - - Parses a file size of the form: number[KB|MB|GB] into a - long value. It is scaled with the appropriate multiplier. - - - is returned when - cannot be converted to a value. - - - - - - Converts a string to an object. - - The target type to convert to. - The string to convert to an object. - - The object converted from a string or null when the - conversion failed. - - - - Converts a string to an object. Uses the converter registry to try - to convert the string value into the specified target type. - - - - - - Checks if there is an appropriate type conversion from the source type to the target type. - - The type to convert from. - The type to convert to. - true if there is a conversion from the source type to the target type. - - Checks if there is an appropriate type conversion from the source type to the target type. - - - - - - - Converts an object to the target type. - - The object to convert to the target type. - The type to convert to. - The converted object. - - - Converts an object to the target type. - - - - - - Instantiates an object given a class name. - - The fully qualified class name of the object to instantiate. - The class to which the new object should belong. - The object to return in case of non-fulfillment. - - An instance of the or - if the object could not be instantiated. - - - - Checks that the is a subclass of - . If that test fails or the object could - not be instantiated, then is returned. - - - - - - Performs variable substitution in string from the - values of keys found in . - - The string on which variable substitution is performed. - The dictionary to use to lookup variables. - The result of the substitutions. - - - The variable substitution delimiters are ${ and }. - - - For example, if props contains key=value, then the call - - - - string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); - - - - will set the variable s to "Value of key is value.". - - - If no value could be found for the specified key, then substitution - defaults to an empty string. - - - For example, if system properties contains no value for the key - "nonExistentKey", then the call - - - - string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); - - - - will set s to "Value of nonExistentKey is []". - - - An Exception is thrown if contains a start - delimiter "${" which is not balanced by a stop delimiter "}". - - - - - - Converts the string representation of the name or numeric value of one or - more enumerated constants to an equivalent enumerated object. - - The type to convert to. - The enum string value. - If true, ignore case; otherwise, regard case. - An object of type whose value is represented by . - - - - Most of the work of the class - is delegated to the PatternParser class. - - - - The PatternParser processes a pattern string and - returns a chain of objects. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The pattern to parse. - - - Initializes a new instance of the class - with the specified pattern string. - - - - - - Parses the pattern into a chain of pattern converters. - - The head of a chain of pattern converters. - - - Parses the pattern into a chain of pattern converters. - - - - - - Build the unified cache of converters from the static and instance maps - - the list of all the converter names - - - Build the unified cache of converters from the static and instance maps - - - - - - Internal method to parse the specified pattern to find specified matches - - the pattern to parse - the converter names to match in the pattern - - - The matches param must be sorted such that longer strings come before shorter ones. - - - - - - Process a parsed literal - - the literal text - - - - Process a parsed converter pattern - - the name of the converter - the optional option for the converter - the formatting info for the converter - - - - Resets the internal state of the parser and adds the specified pattern converter - to the chain. - - The pattern converter to add. - - - - The first pattern converter in the chain - - - - - the last pattern converter in the chain - - - - - The pattern - - - - - Internal map of converter identifiers to converter types - - - - This map overrides the static s_globalRulesRegistry map. - - - - - - Get the converter registry used by this parser - - - The converter registry used by this parser - - - - Get the converter registry used by this parser - - - - - - Sort strings by length - - - - that orders strings by string length. - The longest strings are placed first - - - - - - This class implements a patterned string. - - - - This string has embedded patterns that are resolved and expanded - when the string is formatted. - - - This class functions similarly to the - in that it accepts a pattern and renders it to a string. Unlike the - however the PatternString - does not render the properties of a specific but - of the process in general. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - appdomain - - - Used to output the friendly name of the current AppDomain. - - - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - env - - - Used to output the a specific environment variable. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %env{COMPUTERNAME} would include the value - of the COMPUTERNAME environment variable. - - - The env pattern is not supported on the .NET Compact Framework. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern name offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - processid - - - Used to output the system process ID for the current process. - - - - - property - - - Used to output a specific context property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are stored in logging contexts. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - random - - - Used to output a random string of characters. The string is made up of - uppercase letters and numbers. By default the string is 4 characters long. - The length of the string can be specified within braces directly following the - pattern specifier, e.g. %random{8} would output an 8 character string. - - - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - % - - - The sequence %% outputs a single percent sign. - - - - - - Additional pattern converters may be registered with a specific - instance using or - . - - - See the for details on the - format modifiers supported by the patterns. - - - Nicko Cadell - - - - Internal map of converter identifiers to converter types. - - - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternString only - - - - - Initialize the global registry - - - - - Default constructor - - - - Initialize a new instance of - - - - - - Constructs a PatternString - - The pattern to use with this PatternString - - - Initialize a new instance of with the pattern specified. - - - - - - Initialize object options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Create the used to parse the pattern - - the pattern to parse - The - - - Returns PatternParser used to parse the conversion string. Subclasses - may override this to return a subclass of PatternParser which recognize - custom conversion pattern name. - - - - - - Produces a formatted string as specified by the conversion pattern. - - The TextWriter to write the formatted event to - - - Format the pattern to the . - - - - - - Format the pattern as a string - - the pattern formatted as a string - - - Format the pattern to a string. - - - - - - Add a converter to this PatternString - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - - Add a converter to this PatternString - - the name of the conversion pattern for this converter - the type of the converter - - - Add a converter to this PatternString - - - - - - Gets or sets the pattern formatting string - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - - Wrapper class used to map converter names to converter types - - - - Wrapper class used to map converter names to converter types - - - - - - default constructor - - - - - Gets or sets the name of the conversion pattern - - - The name of the conversion pattern - - - - Gets or sets the name of the conversion pattern - - - - - - Gets or sets the type of the converter - - - The type of the converter - - - - Gets or sets the type of the converter - - - - - - String keyed object map. - - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - - String keyed object map that is read only. - - - - This collection is readonly and cannot be modified. - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - - The Hashtable used to store the properties data - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Copy Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - - Deserialization constructor - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Initializes a new instance of the class - with serialized data. - - - - - - Gets the key names. - - An array of all the keys. - - - Gets the key names. - - - - - - Test if the dictionary contains a specified key - - the key to look for - true if the dictionary contains the specified key - - - Test if the dictionary contains a specified key - - - - - - Serializes this object into the provided. - - The to populate with data. - The destination for this serialization. - - - Serializes this object into the provided. - - - - - - See - - - - - See - - - - - - See - - - - - - - Remove all properties from the properties collection - - - - - See - - - - - - - See - - - - - - - See - - - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - - The hashtable used to store the properties - - - The internal collection used to store the properties - - - - The hashtable used to store the properties - - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - The number of properties in this collection - - - - - See - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - with serialized data. - - The that holds the serialized object data. - The that contains contextual information about the source or destination. - - - Because this class is sealed the serialization constructor is private. - - - - - - Remove the entry with the specified key from this dictionary - - the key for the entry to remove - - - Remove the entry with the specified key from this dictionary - - - - - - See - - an enumerator - - - Returns a over the contest of this collection. - - - - - - See - - the key to remove - - - Remove the entry with the specified key from this dictionary - - - - - - See - - the key to lookup in the collection - true if the collection contains the specified key - - - Test if this collection contains a specified key. - - - - - - Remove all properties from the properties collection - - - - Remove all properties from the properties collection - - - - - - See - - the key - the value to store for the key - - - Store a value for the specified . - - - Thrown if the is not a string - - - - See - - - - - - - See - - - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - - See - - - false - - - - This collection is modifiable. This property always - returns false. - - - - - - See - - - The value for the key specified. - - - - Get or set a value for the specified . - - - Thrown if the is not a string - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - A that ignores the message - - - - This writer is used in special cases where it is necessary - to protect a writer from being closed by a client. - - - Nicko Cadell - - - - Constructor - - the writer to actually write to - - - Create a new ProtectCloseTextWriter using a writer - - - - - - Attach this instance to a different underlying - - the writer to attach to - - - Attach this instance to a different underlying - - - - - - Does not close the underlying output writer. - - - - Does not close the underlying output writer. - This method does nothing. - - - - - - Defines a lock that supports single writers and multiple readers - - - - ReaderWriterLock is used to synchronize access to a resource. - At any given time, it allows either concurrent read access for - multiple threads, or write access for a single thread. In a - situation where a resource is changed infrequently, a - ReaderWriterLock provides better throughput than a simple - one-at-a-time lock, such as . - - - If a platform does not support a System.Threading.ReaderWriterLock - implementation then all readers and writers are serialized. Therefore - the caller must not rely on multiple simultaneous readers. - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Acquires a reader lock - - - - blocks if a different thread has the writer - lock, or if at least one thread is waiting for the writer lock. - - - - - - Decrements the lock count - - - - decrements the lock count. When the count - reaches zero, the lock is released. - - - - - - Acquires the writer lock - - - - This method blocks if another thread has a reader lock or writer lock. - - - - - - Decrements the lock count on the writer lock - - - - ReleaseWriterLock decrements the writer lock count. - When the count reaches zero, the writer lock is released. - - - - - - A that can be and reused - - - - A that can be and reused. - This uses a single buffer for string operations. - - - Nicko Cadell - - - - Create an instance of - - the format provider to use - - - Create an instance of - - - - - - Override Dispose to prevent closing of writer - - flag - - - Override Dispose to prevent closing of writer - - - - - - Reset this string writer so that it can be reused. - - the maximum buffer capacity before it is trimmed - the default size to make the buffer - - - Reset this string writer so that it can be reused. - The internal buffers are cleared and reset. - - - - - - Utility class for system specific information. - - - - Utility class of static methods for system specific information. - - - Nicko Cadell - Gert Driesen - Alexey Solofnenko - - - - Private constructor to prevent instances. - - - - Only static methods are exposed from this type. - - - - - - Initialize default values for private static fields. - - - - Only static methods are exposed from this type. - - - - - - Gets the assembly location path for the specified assembly. - - The assembly to get the location for. - The location of the assembly. - - - This method does not guarantee to return the correct path - to the assembly. If only tries to give an indication as to - where the assembly was loaded from. - - - - - - Gets the fully qualified name of the , including - the name of the assembly from which the was - loaded. - - The to get the fully qualified name for. - The fully qualified name for the . - - - This is equivalent to the Type.AssemblyQualifiedName property, - but this method works on the .NET Compact Framework 1.0 as well as - the full .NET runtime. - - - - - - Gets the short name of the . - - The to get the name for. - The short name of the . - - - The short name of the assembly is the - without the version, culture, or public key. i.e. it is just the - assembly's file name without the extension. - - - Use this rather than Assembly.GetName().Name because that - is not available on the Compact Framework. - - - Because of a FileIOPermission security demand we cannot do - the obvious Assembly.GetName().Name. We are allowed to get - the of the assembly so we - start from there and strip out just the assembly name. - - - - - - Gets the file name portion of the , including the extension. - - The to get the file name for. - The file name of the assembly. - - - Gets the file name portion of the , including the extension. - - - - - - Loads the type specified in the type string. - - A sibling type to use to load the type. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified, it will be loaded from the assembly - containing the specified relative type. If the type is not found in the assembly - then all the loaded assemblies will be searched for the type. - - - - - - Loads the type specified in the type string. - - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the - assembly that is directly calling this method. If the type is not found - in the assembly then all the loaded assemblies will be searched for the type. - - - - - - Loads the type specified in the type string. - - An assembly to load the type from. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the specified - assembly. If the type is not found in the assembly then all the loaded assemblies - will be searched for the type. - - - - - - Generate a new guid - - A new Guid - - - Generate a new guid - - - - - - Create an - - The name of the parameter that caused the exception - The value of the argument that causes this exception - The message that describes the error - the ArgumentOutOfRangeException object - - - Create a new instance of the class - with a specified error message, the parameter name, and the value - of the argument. - - - The Compact Framework does not support the 3 parameter constructor for the - type. This method provides an - implementation that works for all platforms. - - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - - Lookup an application setting - - the application settings key to lookup - the value for the key, or null - - - Configuration APIs are not supported under the Compact Framework - - - - - - Convert a path into a fully qualified local file path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - The path specified must be a local file path, a URI is not supported. - - - - - - Creates a new case-insensitive instance of the class with the default initial capacity. - - A new case-insensitive instance of the class with the default initial capacity - - - The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. - - - - - - Gets an empty array of types. - - - - The Type.EmptyTypes field is not available on - the .NET Compact Framework 1.0. - - - - - - Cache the host name for the current machine - - - - - Cache the application friendly name - - - - - Text to output when a null is encountered. - - - - - Text to output when an unsupported feature is requested. - - - - - Start time for the current process. - - - - - Gets the system dependent line terminator. - - - The system dependent line terminator. - - - - Gets the system dependent line terminator. - - - - - - Gets the base directory for this . - - The base directory path for the current . - - - Gets the base directory for this . - - - The value returned may be either a local file path or a URI. - - - - - - Gets the path to the configuration file for the current . - - The path to the configuration file for the current . - - - The .NET Compact Framework 1.0 does not have a concept of a configuration - file. For this runtime, we use the entry assembly location as the root for - the configuration file name. - - - The value returned may be either a local file path or a URI. - - - - - - Gets the path to the file that first executed in the current . - - The path to the entry assembly. - - - Gets the path to the file that first executed in the current . - - - - - - Gets the ID of the current thread. - - The ID of the current thread. - - - On the .NET framework, the AppDomain.GetCurrentThreadId method - is used to obtain the thread ID for the current thread. This is the - operating system ID for the thread. - - - On the .NET Compact Framework 1.0 it is not possible to get the - operating system thread ID for the current thread. The native method - GetCurrentThreadId is implemented inline in a header file - and cannot be called. - - - On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this - gives a stable id unrelated to the operating system thread ID which may - change if the runtime is using fibers. - - - - - - Get the host name or machine name for the current machine - - - The hostname or machine name - - - - Get the host name or machine name for the current machine - - - The host name () or - the machine name (Environment.MachineName) for - the current machine, or if neither of these are available - then NOT AVAILABLE is returned. - - - - - - Get this application's friendly name - - - The friendly name of this application as a string - - - - If available the name of the application is retrieved from - the AppDomain using AppDomain.CurrentDomain.FriendlyName. - - - Otherwise the file name of the entry assembly is used. - - - - - - Get the start time for the current process. - - - - This is the time at which the log4net library was loaded into the - AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime - this is not the start time for the current process. - - - The log4net library should be loaded by an application early during its - startup, therefore this start time should be a good approximation for - the actual start time. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating, however this start time - will be set per AppDomain. - - - - - - Text to output when a null is encountered. - - - - Use this value to indicate a null has been encountered while - outputting a string representation of an item. - - - The default value is (null). This value can be overridden by specifying - a value for the log4net.NullText appSetting in the application's - .config file. - - - - - - Text to output when an unsupported feature is requested. - - - - Use this value when an unsupported feature is requested. - - - The default value is NOT AVAILABLE. This value can be overridden by specifying - a value for the log4net.NotAvailableText appSetting in the application's - .config file. - - - - - - Utility class that represents a format string. - - - - Utility class that represents a format string. - - - Nicko Cadell - - - - Initialise the - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - - - Format the string and arguments - - the formatted string - - - - Replaces the format item in a specified with the text equivalent - of the value of a corresponding instance in a specified array. - A specified parameter supplies culture-specific formatting information. - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - A copy of format in which the format items have been replaced by the - equivalent of the corresponding instances of in args. - - - - This method does not throw exceptions. If an exception thrown while formatting the result the - exception and arguments are returned in the result string. - - - - - - Process an error during StringFormat - - - - - Dump the contents of an array into a string builder - - - - - Dump an object to a string - - - - - Implementation of Properties collection for the - - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - Nicko Cadell - - - - The thread local data slot to use to store a PropertiesDictionary. - - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property - - the key for the entry to remove - - - Remove a property - - - - - - Clear all properties - - - - Clear all properties - - - - - - Get the PropertiesDictionary for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doing so. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - - Implementation of Stack for the - - - - Implementation of Stack for the - - - Nicko Cadell - - - - The stack store. - - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Clears all the contextual information held in this stack. - - - - Clears all the contextual information held in this stack. - Only call this if you think that this tread is being reused after - a previous call execution which may not have completed correctly. - You do not need to use this method if you always guarantee to call - the method of the - returned from even in exceptional circumstances, - for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - syntax. - - - - - - Removes the top context from this stack. - - The message in the context that was removed from the top of this stack. - - - Remove the top context from this stack, and return - it to the caller. If this stack is empty then an - empty string (not ) is returned. - - - - - - Pushes a new context message into this stack. - - The new context message. - - An that can be used to clean up the context stack. - - - - Pushes a new context onto this stack. An - is returned that can be used to clean up this stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - { - log.Warn("This should have an ThreadContext Stack message"); - } - - - - - - Gets the current context information for this stack. - - The current context information. - - - - Gets the current context information for this stack. - - Gets the current context information - - - Gets the current context information for this stack. - - - - - - Get a portable version of this object - - the portable instance of this object - - - Get a cross thread portable version of this object - - - - - - The number of messages in the stack - - - The current number of messages in the stack - - - - The current number of messages in the stack. That is - the number of times has been called - minus the number of times has been called. - - - - - - Gets and sets the internal stack used by this - - The internal storage stack - - - This property is provided only to support backward compatability - of the . Tytpically the internal stack should not - be modified. - - - - - - Inner class used to represent a single context frame in the stack. - - - - Inner class used to represent a single context frame in the stack. - - - - - - Constructor - - The message for this context. - The parent context in the chain. - - - Initializes a new instance of the class - with the specified message and parent context. - - - - - - Get the message. - - The message. - - - Get the message. - - - - - - Gets the full text of the context down to the root level. - - - The full text of the context down to the root level. - - - - Gets the full text of the context down to the root level. - - - - - - Struct returned from the method. - - - - This struct implements the and is designed to be used - with the pattern to remove the stack frame at the end of the scope. - - - - - - The ThreadContextStack internal stack - - - - - The depth to trim the stack to when this instance is disposed - - - - - Constructor - - The internal stack used by the ThreadContextStack. - The depth to return the stack to when this object is disposed. - - - Initializes a new instance of the class with - the specified stack and return depth. - - - - - - Returns the stack to the correct depth. - - - - Returns the stack to the correct depth. - - - - - - Implementation of Stacks collection for the - - - - Implementation of Stacks collection for the - - - Nicko Cadell - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Gets the named thread context stack - - - The named stack - - - - Gets the named thread context stack - - - - - - Utility class for transforming strings. - - - - Utility class for transforming strings. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Write a string to an - - the writer to write to - the string to write - The string to replace non XML compliant chars with - - - The test is escaped either using XML escape entities - or using CDATA sections. - - - - - - Replace invalid XML characters in text string - - the XML text input string - the string to use in place of invalid characters - A string that does not contain invalid XML characters. - - - Certain Unicode code points are not allowed in the XML InfoSet, for - details see: http://www.w3.org/TR/REC-xml/#charsets. - - - This method replaces any illegal characters in the input string - with the mask string specified. - - - - - - Count the number of times that the substring occurs in the text - - the text to search - the substring to find - the number of times the substring occurs in the text - - - The substring is assumed to be non repeating within itself. - - - - - - Impersonate a Windows Account - - - - This impersonates a Windows account. - - - How the impersonation is done depends on the value of . - This allows the context to either impersonate a set of user credentials specified - using username, domain name and password or to revert to the process credentials. - - - - - - Default constructor - - - - Default constructor - - - - - - Initialize the SecurityContext based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The security context will try to Logon the specified user account and - capture a primary token for impersonation. - - - The required , - or properties were not specified. - - - - Impersonate the Windows account specified by the and properties. - - caller provided state - - An instance that will revoke the impersonation of this SecurityContext - - - - Depending on the property either - impersonate a user using credentials supplied or revert - to the process credentials. - - - - - - Create a given the userName, domainName and password. - - the user name - the domain name - the password - the for the account specified - - - Uses the Windows API call LogonUser to get a principal token for the account. This - token is used to initialize the WindowsIdentity. - - - - - - Gets or sets the impersonation mode for this security context - - - The impersonation mode for this security context - - - - Impersonate either a user with user credentials or - revert this thread to the credentials of the process. - The value is one of the - enum. - - - The default value is - - - When the mode is set to - the user's credentials are established using the - , and - values. - - - When the mode is set to - no other properties need to be set. If the calling thread is - impersonating then it will be reverted back to the process credentials. - - - - - - Gets or sets the Windows username for this security context - - - The Windows username for this security context - - - - This property must be set if - is set to (the default setting). - - - - - - Gets or sets the Windows domain name for this security context - - - The Windows domain name for this security context - - - - The default value for is the local machine name - taken from the property. - - - This property must be set if - is set to (the default setting). - - - - - - Sets the password for the Windows account specified by the and properties. - - - The password for the Windows account specified by the and properties. - - - - This property must be set if - is set to (the default setting). - - - - - - The impersonation modes for the - - - - See the property for - details. - - - - - - Impersonate a user using the credentials supplied - - - - - Revert this the thread to the credentials of the process - - - - - Adds to - - - - Helper class to expose the - through the interface. - - - - - - Constructor - - the impersonation context being wrapped - - - Constructor - - - - - - Revert the impersonation - - - - Revert the impersonation - - - - - - The log4net Global Context. - - - - The GlobalContext provides a location for global debugging - information to be stored. - - - The global context has a properties map and these properties can - be included in the output of log messages. The - supports selecting and outputing these properties. - - - By default the log4net:HostName property is set to the name of - the current machine. - - - - - GlobalContext.Properties["hostname"] = Environment.MachineName; - - - - Nicko Cadell - - - - Private Constructor. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - The global context properties instance - - - - - The global properties map. - - - The global properties map. - - - - The global properties map. - - - - - - The log4net Logical Thread Context. - - - - The LogicalThreadContext provides a location for specific debugging - information to be stored. - The LogicalThreadContext properties override any or - properties with the same name. - - - The Logical Thread Context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Logical Thread Context provides a diagnostic context for the current call context. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Logical Thread Context is managed on a per basis. - - - Example of using the thread context properties to store a username. - - LogicalThreadContext.Properties["user"] = userName; - log.Info("This log message has a LogicalThreadContext Property called 'user'"); - - - Example of how to push a message into the context stack - - using(LogicalThreadContext.Stacks["LDC"].Push("my context message")) - { - log.Info("This log message has a LogicalThreadContext Stack message that includes 'my context message'"); - - } // at the end of the using block the message is automatically popped - - - - Nicko Cadell - - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - The thread context properties instance - - - - - The thread context stacks instance - - - - - The thread properties map - - - The thread properties map - - - - The LogicalThreadContext properties override any - or properties with the same name. - - - - - - The thread stacks - - - stack map - - - - The logical thread stacks. - - - - - - This class is used by client applications to request logger instances. - - - - This class has static methods that are used by a client to request - a logger instance. The method is - used to retrieve a logger. - - - See the interface for more details. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - - log.Info("Application Start"); - log.Debug("This is a debug message"); - - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - Returns the named logger if it exists. - - Returns the named logger if it exists. - - - - If the named logger exists (in the default repository) then it - returns a reference to the logger, otherwise it returns null. - - - The fully qualified logger name to look for. - The logger found, or null if no logger could be found. - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the logger doesn't exist in the specified - repository. - - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the repository for the specified assembly) then it - returns a reference to the logger, otherwise it returns - null. - - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger, or null if the logger doesn't exist in the specified - assembly's repository. - - - - Get the currently defined loggers. - - Returns all the currently defined loggers in the default repository. - - - The root logger is not included in the returned array. - - All the defined loggers. - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - - The root logger is not included in the returned array. - - All the defined loggers. - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - - The root logger is not included in the returned array. - - All the defined loggers. - - - Get or create a logger. - - Retrieves or creates a named logger. - - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The name of the logger to retrieve. - The logger with the name specified. - - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Get the logger for the fully qualified name of the type specified. - - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The repository to lookup in. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The assembly to use to lookup the repository. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Shutdown a logger repository. - - Shuts down the default repository. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - default repository. - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The repository to shutdown. - - - - Shuts down the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The assembly to use to lookup the repository. - - - Reset the configuration of a repository - - Resets all values contained in this repository instance to their defaults. - - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The repository to reset. - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The assembly to use to lookup the repository to reset. - - - Get the logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - - Get a logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - - Create a domain - - Creates a repository with the specified repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - Create a logger repository. - - Creates a repository with the specified repository type. - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - - - - Creates a repository with the specified name. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name. - - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - - Creates a repository for the specified assembly and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - - Creates a repository for the specified assembly and repository type. - - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - - Gets the list of currently defined repositories. - - - - Get an array of all the objects that have been created. - - - An array of all the known objects. - - - - Looks up the wrapper object for the logger specified. - - The logger to get the wrapper for. - The wrapper for the logger specified. - - - - Looks up the wrapper objects for the loggers specified. - - The loggers to get the wrappers for. - The wrapper objects for the loggers specified. - - - - Create the objects used by - this manager. - - The logger to wrap. - The wrapper for the logger specified. - - - - The wrapper map to use to hold the objects. - - - - - Implementation of Mapped Diagnostic Contexts. - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - The MDC class is similar to the class except that it is - based on a map instead of a stack. It provides mapped - diagnostic contexts. A Mapped Diagnostic Context, or - MDC in short, is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The MDC is managed on a per thread basis. - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Gets the context value identified by the parameter. - - The key to lookup in the MDC. - The string value held for the key, or a null reference if no corresponding value is found. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - If the parameter does not look up to a - previously defined context then null will be returned. - - - - - - Add an entry to the MDC - - The key to store the value under. - The value to store. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Puts a context value (the parameter) as identified - with the parameter into the current thread's - context map. - - - If a value is already defined for the - specified then the value will be replaced. If the - is specified as null then the key value mapping will be removed. - - - - - - Removes the key value mapping for the key specified. - - The key to remove. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove the specified entry from this thread's MDC - - - - - - Clear all entries in the MDC - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove all the entries from this thread's MDC - - - - - - Implementation of Nested Diagnostic Contexts. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - A Nested Diagnostic Context, or NDC in short, is an instrument - to distinguish interleaved log output from different sources. Log - output is typically interleaved when a server handles multiple - clients near-simultaneously. - - - Interleaved log output can still be meaningful if each log entry - from different contexts had a distinctive stamp. This is where NDCs - come into play. - - - Note that NDCs are managed on a per thread basis. The NDC class - is made up of static methods that operate on the context of the - calling thread. - - - How to push a message into the context - - using(NDC.Push("my context message")) - { - ... all log calls will have 'my context message' included ... - - } // at the end of the using block the message is automatically removed - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Clears all the contextual information held on the current thread. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Clears the stack of NDC data held on the current thread. - - - - - - Creates a clone of the stack of context information. - - A clone of the context info for this thread. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The results of this method can be passed to the - method to allow child threads to inherit the context of their - parent thread. - - - - - - Inherits the contextual information from another thread. - - The context stack to inherit. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This thread will use the context information from the stack - supplied. This can be used to initialize child threads with - the same contextual information as their parent threads. These - contexts will NOT be shared. Any further contexts that - are pushed onto the stack will not be visible to the other. - Call to obtain a stack to pass to - this method. - - - - - - Removes the top context from the stack. - - - The message in the context that was removed from the top - of the stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Remove the top context from the stack, and return - it to the caller. If the stack is empty then an - empty string (not null) is returned. - - - - - - Pushes a new context message. - - The new context message. - - An that can be used to clean up - the context stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Pushes a new context onto the context stack. An - is returned that can be used to clean up the context stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.NDC.Push("NDC_Message")) - { - log.Warn("This should have an NDC message"); - } - - - - - - Removes the context information for this thread. It is - not required to call this method. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This method is not implemented. - - - - - - Forces the stack depth to be at most . - - The maximum depth of the stack - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Forces the stack depth to be at most . - This may truncate the head of the stack. This only affects the - stack in the current thread. Also it does not prevent it from - growing, it only sets the maximum depth at the time of the - call. This can be used to return to a known context depth. - - - - - - Gets the current context depth. - - The current context depth. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The number of context values pushed onto the context stack. - - - Used to record the current depth of the context. This can then - be restored using the method. - - - - - - - The log4net Thread Context. - - - - The ThreadContext provides a location for thread specific debugging - information to be stored. - The ThreadContext properties override any - properties with the same name. - - - The thread context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Thread Context provides a diagnostic context for the current thread. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Thread Context is managed on a per thread basis. - - - Example of using the thread context properties to store a username. - - ThreadContext.Properties["user"] = userName; - log.Info("This log message has a ThreadContext Property called 'user'"); - - - Example of how to push a message into the context stack - - using(ThreadContext.Stacks["NDC"].Push("my context message")) - { - log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); - - } // at the end of the using block the message is automatically popped - - - - Nicko Cadell - - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - The thread context properties instance - - - - - The thread context stacks instance - - - - - The thread properties map - - - The thread properties map - - - - The ThreadContext properties override any - properties with the same name. - - - - - - The thread stacks - - - stack map - - - - The thread local stacks. - - - - - diff --git a/lib/log4net/netcf-3.5/log4net.dll b/lib/log4net/netcf-3.5/log4net.dll deleted file mode 100644 index 1dc5b0b31d0769be79e44e5baed11f0bf57e8676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225280 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
    BFbDiy-K@dam%*uY4|HQ?LUEs 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 X4hHUE;0^}vVBii0?qJ|=4hH@^o0mw? diff --git a/lib/log4net/netcf-3.5/log4net.xml b/lib/log4net/netcf-3.5/log4net.xml deleted file mode 100644 index 83bbf6e..0000000 --- a/lib/log4net/netcf-3.5/log4net.xml +++ /dev/null @@ -1,25118 +0,0 @@ - - - - log4net - - - - - Appender that logs to a database. - - - - appends logging events to a table within a - database. The appender can be configured to specify the connection - string by setting the property. - The connection type (provider) can be specified by setting the - property. For more information on database connection strings for - your specific database see http://www.connectionstrings.com/. - - - Records are written into the database either using a prepared - statement or a stored procedure. The property - is set to (System.Data.CommandType.Text) to specify a prepared statement - or to (System.Data.CommandType.StoredProcedure) to specify a stored - procedure. - - - The prepared statement text or the name of the stored procedure - must be set in the property. - - - The prepared statement or stored procedure can take a number - of parameters. Parameters are added using the - method. This adds a single to the - ordered list of parameters. The - type may be subclassed if required to provide database specific - functionality. The specifies - the parameter name, database type, size, and how the value should - be generated using a . - - - - An example of a SQL Server table that could be logged to: - - CREATE TABLE [dbo].[Log] ( - [ID] [int] IDENTITY (1, 1) NOT NULL , - [Date] [datetime] NOT NULL , - [Thread] [varchar] (255) NOT NULL , - [Level] [varchar] (20) NOT NULL , - [Logger] [varchar] (255) NOT NULL , - [Message] [varchar] (4000) NOT NULL - ) ON [PRIMARY] - - - - An example configuration to log to the above table: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Julian Biddle - Nicko Cadell - Gert Driesen - Lance Nehring - - - - Abstract base class implementation of that - buffers events in a fixed size buffer. - - - - This base class should be used by appenders that need to buffer a - number of events before logging them. For example the - buffers events and then submits the entire contents of the buffer to - the underlying database in one go. - - - Subclasses should override the - method to deliver the buffered events. - - The BufferingAppenderSkeleton maintains a fixed size cyclic - buffer of events. The size of the buffer is set using - the property. - - A is used to inspect - each event as it arrives in the appender. If the - triggers, then the current buffer is sent immediately - (see ). Otherwise the event - is stored in the buffer. For example, an evaluator can be used to - deliver the events immediately when an ERROR event arrives. - - - The buffering appender can be configured in a mode. - By default the appender is NOT lossy. When the buffer is full all - the buffered events are sent with . - If the property is set to true then the - buffer will not be sent when it is full, and new events arriving - in the appender will overwrite the oldest event in the buffer. - In lossy mode the buffer will only be sent when the - triggers. This can be useful behavior when you need to know about - ERROR events but not about events with a lower level, configure an - evaluator that will trigger when an ERROR event arrives, the whole - buffer will be sent which gives a history of events leading up to - the ERROR event. - - - Nicko Cadell - Gert Driesen - - - - Abstract base class implementation of . - - - - This class provides the code for common functionality, such - as support for threshold filtering and support for general filters. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface for your own strategies for printing log statements. - - - - Implementors should consider extending the - class which provides a default implementation of this interface. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Log the logging event in Appender specific way. - - The event to log - - - This method is called to log a message into this appender. - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - The name uniquely identifies the appender. - - - - - Interface for appenders that support bulk logging. - - - - This interface extends the interface to - support bulk logging of objects. Appenders - should only implement this interface if they can bulk log efficiently. - - - Nicko Cadell - - - - Log the array of logging events in Appender specific way. - - The events to log - - - This method is called to log an array of events into this appender. - - - - - - Interface used to delay activate a configured object. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then the method - must be called by the container after its all the configured properties have been set - and before the component can be used. - - - Nicko Cadell - - - - Activate the options that were previously set with calls to properties. - - - - This allows an object to defer activation of its options until all - options have been set. This is required for components which have - related options that remain ambiguous until all are set. - - - If a component implements this interface then this method must be called - after its properties have been set before the component can be used. - - - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Default constructor - - - Empty default constructor - - - - - Finalizes this appender by calling the implementation's - method. - - - - If this appender has not been closed then the Finalize method - will call . - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Closes the appender and release resources. - - - - Release any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - This method cannot be overridden by subclasses. This method - delegates the closing of the appender to the - method which must be overridden in the subclass. - - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The event to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the abstract method. - - - - - - Performs threshold checks and invokes filters before - delegating actual logging to the subclasses specific - method. - - The array of events to log. - - - This method cannot be overridden by derived classes. A - derived class should override the method - which is called by this method. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - Calls and checks that - it returns true. - - - - - If all of the above steps succeed then the - will be passed to the method. - - - - - - Test if the logging event should we output by this appender - - the event to test - true if the event should be output, false if the event should be ignored - - - This method checks the logging event against the threshold level set - on this appender and also against the filters specified on this - appender. - - - The implementation of this method is as follows: - - - - - - Checks that the severity of the - is greater than or equal to the of this - appender. - - - - Checks that the chain accepts the - . - - - - - - - - - Adds a filter to the end of the filter chain. - - the filter to add to this appender - - - The Filters are organized in a linked list. - - - Setting this property causes the new filter to be pushed onto the - back of the filter chain. - - - - - - Clears the filter list for this appender. - - - - Clears the filter list for this appender. - - - - - - Checks if the message level is below this appender's threshold. - - to test against. - - - If there is no threshold set, then the return value is always true. - - - - true if the meets the - requirements of this appender. - - - - - Is called when the appender is closed. Derived classes should override - this method if resources need to be released. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Subclasses of should implement this method - to perform actual logging. - - The event to append. - - - A subclass must implement this method to perform - logging of the . - - This method will be called by - if all the conditions listed for that method are met. - - - To restrict the logging of events in the appender - override the method. - - - - - - Append a bulk array of logging events. - - the array of logging events - - - This base class implementation calls the - method for each element in the bulk array. - - - A sub class that can better process a bulk array of events should - override this method in addition to . - - - - - - Called before as a precondition. - - - - This method is called by - before the call to the abstract method. - - - This method can be overridden in a subclass to extend the checks - made before the event is passed to the method. - - - A subclass should ensure that they delegate this call to - this base class if it is overridden. - - - true if the call to should proceed. - - - - Renders the to a string. - - The event to render. - The event rendered as a string. - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Where possible use the alternative version of this method - . - That method streams the rendering onto an existing Writer - which can give better performance if the caller already has - a open and ready for writing. - - - - - - Renders the to a string. - - The event to render. - The TextWriter to write the formatted event to - - - Helper method to render a to - a string. This appender must have a - set to render the to - a string. - - If there is exception data in the logging event and - the layout does not process the exception, this method - will append the exception text to the rendered string. - - - Use this method in preference to - where possible. If, however, the caller needs to render the event - to a string then does - provide an efficient mechanism for doing so. - - - - - - The layout of this appender. - - - See for more information. - - - - - The name of this appender. - - - See for more information. - - - - - The level threshold of this appender. - - - - There is no level threshold filtering by default. - - - See for more information. - - - - - - It is assumed and enforced that errorHandler is never null. - - - - It is assumed and enforced that errorHandler is never null. - - - See for more information. - - - - - - The first filter in the filter chain. - - - - Set to null initially. - - - See for more information. - - - - - - The last filter in the filter chain. - - - See for more information. - - - - - Flag indicating if this appender is closed. - - - See for more information. - - - - - The guard prevents an appender from repeatedly calling its own DoAppend method - - - - - StringWriter used to render events - - - - - Gets or sets the threshold of this appender. - - - The threshold of the appender. - - - - All log events with lower level than the threshold level are ignored - by the appender. - - - In configuration files this option is specified by setting the - value of the option to a level - string, such as "DEBUG", "INFO" and so on. - - - - - - Gets or sets the for this appender. - - The of the appender - - - The provides a default - implementation for the property. - - - - - - The filter chain. - - The head of the filter chain filter chain. - - - Returns the head Filter. The Filters are organized in a linked list - and so all Filters on this Appender are available through the result. - - - - - - Gets or sets the for this appender. - - The layout of the appender. - - - See for more information. - - - - - - - Gets or sets the name of this appender. - - The name of the appender. - - - The name uniquely identifies the appender. - - - - - - Tests if this appender requires a to be set. - - - - In the rather exceptional case, where the appender - implementation admits a layout but can also work without it, - then the appender should return true. - - - This default implementation always returns true. - - - - true if the appender requires a layout object, otherwise false. - - - - - The default buffer size. - - - The default size of the cyclic buffer used to store events. - This is set to 512 by default. - - - - - Initializes a new instance of the class. - - - - Protected default constructor to allow subclassing. - - - - - - Initializes a new instance of the class. - - the events passed through this appender must be - fixed by the time that they arrive in the derived class' SendBuffer method. - - - Protected constructor to allow subclassing. - - - The should be set if the subclass - expects the events delivered to be fixed even if the - is set to zero, i.e. when no buffering occurs. - - - - - - Flush the currently buffered events - - - - Flushes any events that have been buffered. - - - If the appender is buffering in mode then the contents - of the buffer will NOT be flushed to the appender. - - - - - - Flush the currently buffered events - - set to true to flush the buffer of lossy events - - - Flushes events that have been buffered. If is - false then events will only be flushed if this buffer is non-lossy mode. - - - If the appender is buffering in mode then the contents - of the buffer will only be flushed if is true. - In this case the contents of the buffer will be tested against the - and if triggering will be output. All other buffered - events will be discarded. - - - If is true then the buffer will always - be emptied by calling this method. - - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Close this appender instance. - - - - Close this appender instance. If this appender is marked - as not then the remaining events in - the buffer must be sent when the appender is closed. - - - - - - This method is called by the method. - - the event to log - - - Stores the in the cyclic buffer. - - - The buffer will be sent (i.e. passed to the - method) if one of the following conditions is met: - - - - The cyclic buffer is full and this appender is - marked as not lossy (see ) - - - An is set and - it is triggered for the - specified. - - - - Before the event is stored in the buffer it is fixed - (see ) to ensure that - any data referenced by the event will be valid when the buffer - is processed. - - - - - - Sends the contents of the buffer. - - The first logging event. - The buffer containing the events that need to be send. - - - The subclass must override . - - - - - - Sends the events. - - The events that need to be send. - - - The subclass must override this method to process the buffered events. - - - - - - The size of the cyclic buffer used to hold the logging events. - - - Set to by default. - - - - - The cyclic buffer used to store the logging events. - - - - - The triggering event evaluator that causes the buffer to be sent immediately. - - - The object that is used to determine if an event causes the entire - buffer to be sent immediately. This field can be null, which - indicates that event triggering is not to be done. The evaluator - can be set using the property. If this appender - has the ( property) set to - true then an must be set. - - - - - Indicates if the appender should overwrite events in the cyclic buffer - when it becomes full, or if the buffer should be flushed when the - buffer is full. - - - If this field is set to true then an must - be set. - - - - - The triggering event evaluator filters discarded events. - - - The object that is used to determine if an event that is discarded should - really be discarded or if it should be sent to the appenders. - This field can be null, which indicates that all discarded events will - be discarded. - - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - - The events delivered to the subclass must be fixed. - - - - - Gets or sets a value that indicates whether the appender is lossy. - - - true if the appender is lossy, otherwise false. The default is false. - - - - This appender uses a buffer to store logging events before - delivering them. A triggering event causes the whole buffer - to be send to the remote sink. If the buffer overruns before - a triggering event then logging events could be lost. Set - to false to prevent logging events - from being lost. - - If is set to true then an - must be specified. - - - - - Gets or sets the size of the cyclic buffer used to hold the - logging events. - - - The size of the cyclic buffer used to hold the logging events. - - - - The option takes a positive integer - representing the maximum number of logging events to collect in - a cyclic buffer. When the is reached, - oldest events are deleted as new events are added to the - buffer. By default the size of the cyclic buffer is 512 events. - - - If the is set to a value less than - or equal to 1 then no buffering will occur. The logging event - will be delivered synchronously (depending on the - and properties). Otherwise the event will - be buffered. - - - - - - Gets or sets the that causes the - buffer to be sent immediately. - - - The that causes the buffer to be - sent immediately. - - - - The evaluator will be called for each event that is appended to this - appender. If the evaluator triggers then the current buffer will - immediately be sent (see ). - - If is set to true then an - must be specified. - - - - - Gets or sets the value of the to use. - - - The value of the to use. - - - - The evaluator will be called for each event that is discarded from this - appender. If the evaluator triggers then the current buffer will immediately - be sent (see ). - - - - - - Gets or sets a value indicating if only part of the logging event data - should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the - event data to be fixed and serialized. This will improve performance. - - - See for more information. - - - - - - Gets or sets a the fields that will be fixed in the event - - - The event fields that will be fixed before the event is buffered - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - - Initializes a new instance of the class. - - - Public default constructor to initialize a new instance of this class. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Override the parent method to close the database - - - - Closes the database command and database connection. - - - - - - Inserts the events into the database. - - The events to insert into the database. - - - Insert all the events specified in the - array into the database. - - - - - - Adds a parameter to the command. - - The parameter to add to the command. - - - Adds a parameter to the ordered list of command parameters. - - - - - - Writes the events to the database using the transaction specified. - - The transaction that the events will be executed under. - The array of events to insert into the database. - - - The transaction argument can be null if the appender has been - configured not to use transactions. See - property for more information. - - - - - - Formats the log message into database statement text. - - The event being logged. - - This method can be overridden by subclasses to provide - more control over the format of the database statement. - - - Text that can be passed to a . - - - - - Connects to the database. - - - - - Retrieves the class type of the ADO.NET provider. - - - - Gets the Type of the ADO.NET provider to use to connect to the - database. This method resolves the type specified in the - property. - - - Subclasses can override this method to return a different type - if necessary. - - - The of the ADO.NET provider - - - - Prepares the database command and initialize the parameters. - - - - - Flag to indicate if we are using a command object - - - - Set to true when the appender is to use a prepared - statement or stored procedure to insert into the database. - - - - - - The list of objects. - - - - The list of objects. - - - - - - The security context to use for privileged calls - - - - - The that will be used - to insert logging events into a database. - - - - - The database command. - - - - - Database connection string. - - - - - String type name of the type name. - - - - - The text of the command. - - - - - The command type. - - - - - Indicates whether to use transactions when writing to the database. - - - - - Indicates whether to use transactions when writing to the database. - - - - - Gets or sets the database connection string that is used to connect to - the database. - - - The database connection string used to connect to the database. - - - - The connections string is specific to the connection type. - See for more information. - - - Connection string for MS Access via ODBC: - "DSN=MS Access Database;UID=admin;PWD=;SystemDB=C:\data\System.mdw;SafeTransactions = 0;FIL=MS Access;DriverID = 25;DBQ=C:\data\train33.mdb" - - Another connection string for MS Access via ODBC: - "Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Work\cvs_root\log4net-1.2\access.mdb;UID=;PWD=;" - - Connection string for MS Access via OLE DB: - "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Work\cvs_root\log4net-1.2\access.mdb;User Id=;Password=;" - - - - - Gets or sets the type name of the connection - that should be created. - - - The type name of the connection. - - - - The type name of the ADO.NET provider to use. - - - The default is to use the OLE DB provider. - - - Use the OLE DB Provider. This is the default value. - System.Data.OleDb.OleDbConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Use the MS SQL Server Provider. - System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Use the ODBC Provider. - Microsoft.Data.Odbc.OdbcConnection,Microsoft.Data.Odbc,version=1.0.3300.0,publicKeyToken=b77a5c561934e089,culture=neutral - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for ODBC .NET Data Provider. - - Use the Oracle Provider. - System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - This is an optional package that you can download from - http://msdn.microsoft.com/downloads - search for .NET Managed Provider for Oracle. - - - - - Gets or sets the command text that is used to insert logging events - into the database. - - - The command text used to insert logging events into the database. - - - - Either the text of the prepared statement or the - name of the stored procedure to execute to write into - the database. - - - The property determines if - this text is a prepared statement or a stored procedure. - - - - - - Gets or sets the command type to execute. - - - The command type to execute. - - - - This value may be either (System.Data.CommandType.Text) to specify - that the is a prepared statement to execute, - or (System.Data.CommandType.StoredProcedure) to specify that the - property is the name of a stored procedure - to execute. - - - The default value is (System.Data.CommandType.Text). - - - - - - Should transactions be used to insert logging events in the database. - - - true if transactions should be used to insert logging events in - the database, otherwise false. The default value is true. - - - - Gets or sets a value that indicates whether transactions should be used - to insert logging events in the database. - - - When set a single transaction will be used to insert the buffered events - into the database. Otherwise each event will be inserted without using - an explicit transaction. - - - - - - Gets or sets the used to call the NetSend method. - - - The used to call the NetSend method. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - Should this appender try to reconnect to the database on error. - - - true if the appender should try to reconnect to the database after an - error has occurred, otherwise false. The default value is false, - i.e. not to try to reconnect. - - - - The default behaviour is for the appender not to try to reconnect to the - database if an error occurs. Subsequent logging events are discarded. - - - To force the appender to attempt to reconnect to the database set this - property to true. - - - When the appender attempts to connect to the database there may be a - delay of up to the connection timeout specified in the connection string. - This delay will block the calling application's thread. - Until the connection can be reestablished this potential delay may occur multiple times. - - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to insert - logging events into a database. Classes deriving from - can use this property to get or set this . Use the - underlying returned from if - you require access beyond that which provides. - - - - - Parameter type used by the . - - - - This class provides the basic database parameter properties - as defined by the interface. - - This type can be subclassed to provide database specific - functionality. The two methods that are called externally are - and . - - - - - - Initializes a new instance of the class. - - - Default constructor for the AdoNetAppenderParameter class. - - - - - Prepare the specified database command object. - - The command to prepare. - - - Prepares the database command object by adding - this parameter to its collection of parameters. - - - - - - Renders the logging event and set the parameter value in the command. - - The command containing the parameter. - The event to be rendered. - - - Renders the logging event using this parameters layout - object. Sets the value of the parameter on the command object. - - - - - - The name of this parameter. - - - - - The database type for this parameter. - - - - - Flag to infer type rather than use the DbType - - - - - The precision for this parameter. - - - - - The scale for this parameter. - - - - - The size for this parameter. - - - - - The to use to render the - logging event into an object for this parameter. - - - - - Gets or sets the name of this parameter. - - - The name of this parameter. - - - - The name of this parameter. The parameter name - must match up to a named parameter to the SQL stored procedure - or prepared statement. - - - - - - Gets or sets the database type for this parameter. - - - The database type for this parameter. - - - - The database type for this parameter. This property should - be set to the database type from the - enumeration. See . - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the type from the value. - - - - - - - Gets or sets the precision for this parameter. - - - The precision for this parameter. - - - - The maximum number of digits used to represent the Value. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the precision from the value. - - - - - - - Gets or sets the scale for this parameter. - - - The scale for this parameter. - - - - The number of decimal places to which Value is resolved. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the scale from the value. - - - - - - - Gets or sets the size for this parameter. - - - The size for this parameter. - - - - The maximum size, in bytes, of the data within the column. - - - This property is optional. If not specified the ADO.NET provider - will attempt to infer the size from the value. - - - - - - - Gets or sets the to use to - render the logging event into an object for this - parameter. - - - The used to render the - logging event into an object for this parameter. - - - - The that renders the value for this - parameter. - - - The can be used to adapt - any into a - for use in the property. - - - - - - Appends logging events to the terminal using ANSI color escape sequences. - - - - AnsiColorTerminalAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. It also allows the color of a specific level of message to be set. - - - This appender expects the terminal to understand the VT100 control set - in order to interpret the color codes. If the terminal or console does not - understand the control codes the behavior is not defined. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - When configuring the ANSI colored terminal appender, a mapping should be - specified to map a logging level to a color. For example: - - - - - - - - - - - - - - - The Level is the standard log4net logging level and ForeColor and BackColor can be any - of the following values: - - Blue - Green - Red - White - Yellow - Purple - Cyan - - These color values cannot be combined together to make new colors. - - - The attributes can be any combination of the following: - - Brightforeground is brighter - Dimforeground is dimmer - Underscoremessage is underlined - Blinkforeground is blinking (does not work on all terminals) - Reverseforeground and background are reversed - Hiddenoutput is hidden - Strikethroughmessage has a line through it - - While any of these attributes may be combined together not all combinations - work well together, for example setting both Bright and Dim attributes makes - no sense. - - - Patrick Wagstrom - Nicko Cadell - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Ansi code to reset terminal - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Add a mapping of level to color - - The mapping to add - - - Add a mapping to this appender. - Each mapping defines the foreground and background colours - for a level. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to color mappings set on this appender. - - - - - - Flag to write output to the error stream rather than the standard output stream - - - - - Mapping from level object to color value - - - - - Target is the value of the console output stream. - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - The enum of possible display attributes - - - - The following flags can be combined together to - form the ANSI color attributes. - - - - - - - text is bright - - - - - text is dim - - - - - text is underlined - - - - - text is blinking - - - Not all terminals support this attribute - - - - - text and background colors are reversed - - - - - text is hidden - - - - - text is displayed with a strikethrough - - - - - The enum of possible foreground or background color values for - use with the color mapping method - - - - The output can be in one for the following ANSI colors. - - - - - - - color is black - - - - - color is red - - - - - color is green - - - - - color is yellow - - - - - color is blue - - - - - color is magenta - - - - - color is cyan - - - - - color is white - - - - - A class to act as a mapping between the level that a logging call is made at and - the color it should be displayed as. - - - - Defines the mapping between a level and the color it should be displayed in. - - - - - - An entry in the - - - - This is an abstract base class for types that are stored in the - object. - - - Nicko Cadell - - - - Default protected constructor - - - - Default protected constructor - - - - - - Initialize any options defined on this entry - - - - Should be overridden by any classes that need to initialise based on their options - - - - - - The level that is the key for this mapping - - - The that is the key for this mapping - - - - Get or set the that is the key for this - mapping subclass. - - - - - - Initialize the options for the object - - - - Combine the and together - and append the attributes. - - - - - - The mapped foreground color for the specified level - - - - Required property. - The mapped foreground color for the specified level - - - - - - The mapped background color for the specified level - - - - Required property. - The mapped background color for the specified level - - - - - - The color attributes for the specified level - - - - Required property. - The color attributes for the specified level - - - - - - The combined , and - suitable for setting the ansi terminal color. - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a AppenderCollection instance. - - list to create a readonly wrapper arround - - An AppenderCollection wrapper that is read-only. - - - - - An empty readonly static AppenderCollection - - - - - Initializes a new instance of the AppenderCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the AppenderCollection class - that has the specified initial capacity. - - - The number of elements that the new AppenderCollection is initially capable of storing. - - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified AppenderCollection. - - The AppenderCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the AppenderCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - - Copies the entire AppenderCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire AppenderCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the AppenderCollection. - - The to be added to the end of the AppenderCollection. - The index at which the value has been added. - - - - Removes all elements from the AppenderCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the AppenderCollection. - - The to check for. - true if is found in the AppenderCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the AppenderCollection. - - The to locate in the AppenderCollection. - - The zero-based index of the first occurrence of - in the entire AppenderCollection, if found; otherwise, -1. - - - - - Inserts an element into the AppenderCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the AppenderCollection. - - The to remove from the AppenderCollection. - - The specified was not found in the AppenderCollection. - - - - - Removes the element at the specified index of the AppenderCollection. - - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the AppenderCollection. - - An for the entire AppenderCollection. - - - - Adds the elements of another AppenderCollection to the current AppenderCollection. - - The AppenderCollection whose elements should be added to the end of the current AppenderCollection. - The new of the AppenderCollection. - - - - Adds the elements of a array to the current AppenderCollection. - - The array whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - - Adds the elements of a collection to the current AppenderCollection. - - The collection whose elements should be added to the end of the AppenderCollection. - The new of the AppenderCollection. - - - - Sets the capacity to the actual number of elements. - - - - - Return the collection elements as an array - - the array - - - - is less than zero - -or- - is equal to or greater than . - - - - - is less than zero - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the AppenderCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - is less than zero - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - - Gets or sets the number of elements the AppenderCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - - A value - - - - - Supports simple iteration over a . - - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - - - - Buffers events and then forwards them to attached appenders. - - - - The events are buffered in this appender until conditions are - met to allow the appender to deliver the events to the attached - appenders. See for the - conditions that cause the buffer to be sent. - - The forwarding appender can be used to specify different - thresholds and filters for the same appender at different locations - within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Interface for attaching appenders to objects. - - - - Interface for attaching, removing and retrieving appenders. - - - Nicko Cadell - Gert Driesen - - - - Attaches an appender. - - The appender to add. - - - Add the specified appender. The implementation may - choose to allow or deny duplicate appenders. - - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Returns an attached appender with the specified. - If no appender with the specified name is found null will be - returned. - - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Gets all attached appenders. - - - A collection of attached appenders. - - - - Gets a collection of attached appenders. - If there are no attached appenders the - implementation should return an empty - collection rather than null. - - - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Send the events. - - The events that need to be send. - - - Forwards the events to the attached appenders. - - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this buffering appender. - - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Implementation of the interface - - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - - Appends logging events to the console. - - - - ConsoleAppender appends log events to the standard output stream - or the error output stream using a layout specified by the - user. - - - By default, all output is written to the console's standard output stream. - The property can be set to direct the output to the - error stream. - - - NOTE: This appender writes each message to the System.Console.Out or - System.Console.Error that is set at the time the event is appended. - Therefore it is possible to programmatically redirect the output of this appender - (for example NUnit does this to capture program output). While this is the desired - behavior of this appender it may have security implications in your application. - - - Nicko Cadell - Gert Driesen - - - - The to use when writing to the Console - standard output stream. - - - - The to use when writing to the Console - standard output stream. - - - - - - The to use when writing to the Console - standard error output stream. - - - - The to use when writing to the Console - standard error output stream. - - - - - - Initializes a new instance of the class. - - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - - The instance of the class is set up to write - to the standard output stream. - - - - - Initializes a new instance of the class - with the specified layout. - - the layout to use for this appender - flag set to true to write to the console error stream - - When is set to true, output is written to - the standard error output stream. Otherwise, output is written to the standard - output stream. - - - - - This method is called by the method. - - The event to log. - - - Writes the event to the console. - - - The format of the output will depend on the appender's layout. - - - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - Target is the value of the console output stream. - This is either "Console.Out" or "Console.Error". - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - debug system. - - - Events are written using the - method. The event's logger name is passed as the value for the category name to the Write method. - - - Nicko Cadell - - - - Initializes a new instance of the . - - - - Default constructor. - - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - If is true then the - is called. - - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appends logging events to a file. - - - - Logging events are sent to the file specified by - the property. - - - The file can be opened in either append or overwrite mode - by specifying the property. - If the file path is relative it is taken as relative from - the application base directory. The file encoding can be - specified by setting the property. - - - The layout's and - values will be written each time the file is opened and closed - respectively. If the property is - then the file may contain multiple copies of the header and footer. - - - This appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - The supports pluggable file locking models via - the property. - The default behavior, implemented by - is to obtain an exclusive write lock on the file until this appender is closed. - The alternative model, , only holds a - write lock while the appender is writing a logging event. - - - Nicko Cadell - Gert Driesen - Rodrigo B. de Oliveira - Douglas de la Torre - Niall Daley - - - - Sends logging events to a . - - - - An Appender that writes to a . - - - This appender may be used stand alone if initialized with an appropriate - writer, however it is typically used as a base class for an appender that - can open a to write to. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Initializes a new instance of the class and - sets the output destination to a new initialized - with the specified . - - The layout to use with this appender. - The to output to. - - - Obsolete constructor. - - - - - - Initializes a new instance of the class and sets - the output destination to the specified . - - The layout to use with this appender - The to output to - - The must have been previously opened. - - - - Obsolete constructor. - - - - - - This method determines if there is a sense in attempting to append. - - - - This method checked if an output target has been set and if a - layout has been set. - - - false if any of the preconditions fail. - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - - This method is called by the - method. - - The array of events to log. - - - This method writes all the bulk logged events to the output writer - before flushing the stream. - - - - - - Close this appender instance. The underlying stream or writer is also closed. - - - Closed appenders cannot be reused. - - - - - Writes the footer and closes the underlying . - - - - Writes the footer and closes the underlying . - - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - - Clears internal references to the underlying - and other variables. - - - - Subclasses can override this method for an alternate closing behavior. - - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - - Called to allow a subclass to lazily initialize the writer - - - - This method is called when an event is logged and the or - have not been set. This allows a subclass to - attempt to initialize the writer multiple times. - - - - - - This is the where logging events - will be written to. - - - - - Immediate flush means that the underlying - or output stream will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logging events are not actually persisted if and when the application - crashes. - - - The default value is true. - - - - - - Gets or set whether the appender will flush at the end - of each append operation. - - - - The default behavior is to flush at the end of each - append operation. - - - If this option is set to false, then the underlying - stream can defer persisting the logging event to a later - time. - - - - Avoiding the flush operation at the end of each append results in - a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - Sets the where the log output will go. - - - - The specified must be open and writable. - - - The will be closed when the appender - instance is closed. - - - Note: Logging to an unopened will fail. - - - - - - Gets or set the and the underlying - , if any, for this appender. - - - The for this appender. - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Gets or sets the where logging events - will be written to. - - - The where logging events are written. - - - - This is the where logging events - will be written to. - - - - - - Default constructor - - - - Default constructor - - - - - - Construct a new appender using the layout, file and append mode. - - the layout to use with this appender - the full path to the file to write to - flag to indicate if the file should be appended to - - - Obsolete constructor. - - - - - - Construct a new appender using the layout and file specified. - The file will be appended to. - - the layout to use with this appender - the full path to the file to write to - - - Obsolete constructor. - - - - - - Activate the options on the file appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This will cause the file to be opened. - - - - - - Closes any previously opened file and calls the parent's . - - - - Resets the filename and the file stream. - - - - - - Called to initialize the file writer - - - - Will be called for each logged message until the file is - successfully opened. - - - - - - This method is called by the - method. - - The event to log. - - - Writes a log statement to the output stream if the output stream exists - and is writable. - - - The format of the output will depend on the appender's layout. - - - - - - This method is called by the - method. - - The array of events to log. - - - Acquires the output file locks once before writing all the events to - the stream. - - - - - - Writes a footer as produced by the embedded layout's property. - - - - Writes a footer as produced by the embedded layout's property. - - - - - - Writes a header produced by the embedded layout's property. - - - - Writes a header produced by the embedded layout's property. - - - - - - Closes the underlying . - - - - Closes the underlying . - - - - - - Closes the previously opened file. - - - - Writes the to the file and then - closes the file. - - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - Calls but guarantees not to throw an exception. - Errors are passed to the . - - - - - - Sets and opens the file where the log output will go. The specified file must be writable. - - The path to the log file. Must be a fully qualified path. - If true will append to fileName. Otherwise will truncate fileName - - - If there was already an opened file, then the previous file - is closed first. - - - This method will ensure that the directory structure - for the specified exists. - - - - - - Sets the quiet writer used for file output - - the file stream that has been opened for writing - - - This implementation of creates a - over the and passes it to the - method. - - - This method can be overridden by sub classes that want to wrap the - in some way, for example to encrypt the output - data using a System.Security.Cryptography.CryptoStream. - - - - - - Sets the quiet writer being used. - - the writer over the file stream that has been opened for writing - - - This method can be overridden by sub classes that want to - wrap the in some way. - - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - - Flag to indicate if we should append to the file - or overwrite the file. The default is to append. - - - - - The name of the log file. - - - - - The encoding to use for the file stream. - - - - - The security context to use for privileged calls - - - - - The stream to log to. Has added locking semantics - - - - - The locking model to use - - - - - Gets or sets the path to the file that logging will be written to. - - - The path to the file that logging will be written to. - - - - If the path is relative it is taken as relative from - the application base directory. - - - - - - Gets or sets a flag that indicates whether the file should be - appended to or overwritten. - - - Indicates whether the file should be appended to or overwritten. - - - - If the value is set to false then the file will be overwritten, if - it is set to true then the file will be appended to. - - The default value is true. - - - - - Gets or sets used to write to the file. - - - The used to write to the file. - - - - The default encoding set is - which is the encoding for the system's current ANSI code page. - - - - - - Gets or sets the used to write to the file. - - - The used to write to the file. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - Gets or sets the used to handle locking of the file. - - - The used to lock the file. - - - - Gets or sets the used to handle locking of the file. - - - There are two built in locking models, and . - The former locks the file from the start of logging to the end and the - later lock only for the minimal amount of time when logging each message. - - - The default locking model is the . - - - - - - Write only that uses the - to manage access to an underlying resource. - - - - - True asynchronous writes are not supported, the implementation forces a synchronous write. - - - - - Exception base type for log4net. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class with - the specified message. - - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - - Locking model base class - - - - Base class for the locking models available to the derived loggers. - - - - - - Open the output file - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - - Gets or sets the for this LockingModel - - - The for this LockingModel - - - - The file appender this locking model is attached to and working on - behalf of. - - - The file appender is used to locate the security context and the error handler to use. - - - The value of this property will be set before is - called. - - - - - - Hold an exclusive lock on the output file - - - - Open the file once for writing and hold it open until is called. - Maintains an exclusive lock on the file during this time. - - - - - - Open the file specified and prepare for logging. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Does nothing. The lock is already taken - - - - - - Release the lock on the file - - - - Does nothing. The lock will be released when the file is closed. - - - - - - Acquires the file lock for each write - - - - Opens the file once for each / cycle, - thus holding the lock for the minimal amount of time. This method of locking - is considerably slower than but allows - other processes to move/delete the log file whilst logging continues. - - - - - - Prepares to open the file when the first message is logged. - - The filename to use - Whether to append to the file, or overwrite - The encoding to use - - - Open the file specified and prepare for logging. - No writes will be made until is called. - Must be called before any calls to , - and . - - - - - - Close the file - - - - Close the file. No further writes will be made. - - - - - - Acquire the lock on the file - - A stream that is ready to be written to. - - - Acquire the lock on the file in preparation for writing to it. - Return a stream pointing to the file. - must be called to release the lock on the output file. - - - - - - Release the lock on the file - - - - Release the lock on the file. No further writes will be made to the - stream until is called again. - - - - - - This appender forwards logging events to attached appenders. - - - - The forwarding appender can be used to specify different thresholds - and filters for the same appender at different locations within the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Closes the appender and releases resources. - - - - Releases any resources allocated within the appender such as file handles, - network connections, etc. - - - It is a programming error to append to a closed appender. - - - - - - Forward the logging event to the attached appenders - - The event to log. - - - Delivers the logging event to all the attached appenders. - - - - - - Forward the logging events to the attached appenders - - The array of events to log. - - - Delivers the logging events to all the attached appenders. - - - - - - Adds an to the list of appenders of this - instance. - - The to add to this appender. - - - If the specified is already in the list of - appenders, then it won't be added again. - - - - - - Looks for the appender with the specified name. - - The name of the appender to lookup. - - The appender with the specified name, or null. - - - - Get the named appender attached to this appender. - - - - - - Removes all previously added appenders from this appender. - - - - This is useful when re-reading configuration information. - - - - - - Removes the specified appender from the list of appenders. - - The appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - Implementation of the interface - - - - - Gets the appenders contained in this appender as an - . - - - If no appenders can be found, then an - is returned. - - - A collection of the appenders in this appender. - - - - - Stores logging events in an array. - - - - The memory appender stores all the logging events - that are appended in an in-memory array. - - - Use the method to get - the current list of events that have been appended. - - - Use the method to clear the - current list of events. - - - Julian Biddle - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Gets the events that have been logged. - - The events that have been logged - - - Gets the events that have been logged. - - - - - - This method is called by the method. - - the event to log - - Stores the in the events list. - - - - - Clear the list of events - - - Clear the list of events - - - - - The list of events that have been appended. - - - - - Value indicating which fields in the event should be fixed - - - By default all fields are fixed - - - - - Gets or sets a value indicating whether only part of the logging event - data should be fixed. - - - true if the appender should only fix part of the logging event - data, otherwise false. The default is false. - - - - Setting this property to true will cause only part of the event - data to be fixed and stored in the appender, hereby improving performance. - - - See for more information. - - - - - - Gets or sets the fields that will be fixed in the event - - - - The logging event needs to have certain thread specific values - captured before it can be buffered. See - for details. - - - - - - Appends log events to the OutputDebugString system. - - - - OutputDebugStringAppender appends log events to the - OutputDebugString system. - - - The string is passed to the native OutputDebugString - function. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Write the logging event to the output debug string API - - the event to log - - - Write the logging event to the output debug string API - - - - - - Stub for OutputDebugString native method - - the string to output - - - Stub for OutputDebugString native method - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Logs events to a remote syslog daemon. - - - - The BSD syslog protocol is used to remotely log to - a syslog daemon. The syslogd listens for for messages - on UDP port 514. - - - The syslog UDP protocol is not authenticated. Most syslog daemons - do not accept remote log messages because of the security implications. - You may be able to use the LocalSyslogAppender to talk to a local - syslog service. - - - There is an RFC 3164 that claims to document the BSD Syslog Protocol. - This RFC can be seen here: http://www.faqs.org/rfcs/rfc3164.html. - This appender generates what the RFC calls an "Original Device Message", - i.e. does not include the TIMESTAMP or HOSTNAME fields. By observation - this format of message will be accepted by all current syslog daemon - implementations. The daemon will attach the current time and the source - hostname or IP address to any messages received. - - - Syslog messages must have a facility and and a severity. The severity - is derived from the Level of the logging event. - The facility must be chosen from the set of defined syslog - values. The facilities list is predefined - and cannot be extended. - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - Rob Lyon - Nicko Cadell - - - - Sends logging events as connectionless UDP datagrams to a remote host or a - multicast group using an . - - - - UDP guarantees neither that messages arrive, nor that they arrive in the correct order. - - - To view the logging results, a custom application can be developed that listens for logging - events. - - - When decoding events send via this appender remember to use the same encoding - to decode the events as was used to send the events. See the - property to specify the encoding to use. - - - - This example shows how to log receive logging events that are sent - on IP address 244.0.0.1 and port 8080 to the console. The event is - encoded in the packet as a unicode string and it is decoded as such. - - IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); - UdpClient udpClient; - byte[] buffer; - string loggingEvent; - - try - { - udpClient = new UdpClient(8080); - - while(true) - { - buffer = udpClient.Receive(ref remoteEndPoint); - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); - Console.WriteLine(loggingEvent); - } - } - catch(Exception e) - { - Console.WriteLine(e.ToString()); - } - - - Dim remoteEndPoint as IPEndPoint - Dim udpClient as UdpClient - Dim buffer as Byte() - Dim loggingEvent as String - - Try - remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) - udpClient = new UdpClient(8080) - - While True - buffer = udpClient.Receive(ByRef remoteEndPoint) - loggingEvent = System.Text.Encoding.Unicode.GetString(buffer) - Console.WriteLine(loggingEvent) - Wend - Catch e As Exception - Console.WriteLine(e.ToString()) - End Try - - - An example configuration section to log information using this appender to the - IP 224.0.0.1 on port 8080: - - - - - - - - - - Gert Driesen - Nicko Cadell - - - - Initializes a new instance of the class. - - - The default constructor initializes all fields to their default values. - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - The appender will be ignored if no was specified or - an invalid remote or local TCP port number was specified. - - - The required property was not specified. - The TCP port number assigned to or is less than or greater than . - - - - This method is called by the method. - - The event to log. - - - Sends the event using an UDP datagram. - - - Exceptions are passed to the . - - - - - - Closes the UDP connection and releases all resources associated with - this instance. - - - - Disables the underlying and releases all managed - and unmanaged resources associated with the . - - - - - - Initializes the underlying connection. - - - - The underlying is initialized and binds to the - port number from which you intend to communicate. - - - Exceptions are passed to the . - - - - - - The IP address of the remote host or multicast group to which - the logging event will be sent. - - - - - The TCP port number of the remote host or multicast group to - which the logging event will be sent. - - - - - The cached remote endpoint to which the logging events will be sent. - - - - - The TCP port number from which the will communicate. - - - - - The instance that will be used for sending the - logging events. - - - - - The encoding to use for the packet. - - - - - Gets or sets the IP address of the remote host or multicast group to which - the underlying should sent the logging event. - - - The IP address of the remote host or multicast group to which the logging event - will be sent. - - - - Multicast addresses are identified by IP class D addresses (in the range 224.0.0.0 to - 239.255.255.255). Multicast packets can pass across different networks through routers, so - it is possible to use multicasts in an Internet scenario as long as your network provider - supports multicasting. - - - Hosts that want to receive particular multicast messages must register their interest by joining - the multicast group. Multicast messages are not sent to networks where no host has joined - the multicast group. Class D IP addresses are used for multicast groups, to differentiate - them from normal host addresses, allowing nodes to easily detect if a message is of interest. - - - Static multicast addresses that are needed globally are assigned by IANA. A few examples are listed in the table below: - - - - - IP Address - Description - - - 224.0.0.1 - - - Sends a message to all system on the subnet. - - - - - 224.0.0.2 - - - Sends a message to all routers on the subnet. - - - - - 224.0.0.12 - - - The DHCP server answers messages on the IP address 224.0.0.12, but only on a subnet. - - - - - - - A complete list of actually reserved multicast addresses and their owners in the ranges - defined by RFC 3171 can be found at the IANA web site. - - - The address range 239.0.0.0 to 239.255.255.255 is reserved for administrative scope-relative - addresses. These addresses can be reused with other local groups. Routers are typically - configured with filters to prevent multicast traffic in this range from flowing outside - of the local network. - - - - - - Gets or sets the TCP port number of the remote host or multicast group to which - the underlying should sent the logging event. - - - An integer value in the range to - indicating the TCP port number of the remote host or multicast group to which the logging event - will be sent. - - - The underlying will send messages to this TCP port number - on the remote host or multicast group. - - The value specified is less than or greater than . - - - - Gets or sets the TCP port number from which the underlying will communicate. - - - An integer value in the range to - indicating the TCP port number from which the underlying will communicate. - - - - The underlying will bind to this port for sending messages. - - - Setting the value to 0 (the default) will cause the udp client not to bind to - a local port. - - - The value specified is less than or greater than . - - - - Gets or sets used to write the packets. - - - The used to write the packets. - - - - The used to write the packets. - - - - - - Gets or sets the underlying . - - - The underlying . - - - creates a to send logging events - over a network. Classes deriving from can use this - property to get or set this . Use the underlying - returned from if you require access beyond that which - provides. - - - - - Gets or sets the cached remote endpoint to which the logging events should be sent. - - - The cached remote endpoint to which the logging events will be sent. - - - The method will initialize the remote endpoint - with the values of the and - properties. - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Syslog port 514 - - - - - Initializes a new instance of the class. - - - This instance of the class is set up to write - to a remote syslog daemon. - - - - - Add a mapping of level to severity - - The mapping to add - - - Add a mapping to this appender. - - - - - - This method is called by the method. - - The event to log. - - - Writes the event to a remote syslog daemon. - - - The format of the output will depend on the appender's layout. - - - - - - Initialize the options for this appender - - - - Initialize the level to syslog severity mappings set on this appender. - - - - - - Translates a log4net level to a syslog severity. - - A log4net level. - A syslog severity. - - - Translates a log4net level to a syslog severity. - - - - - - Generate a syslog priority. - - The syslog facility. - The syslog severity. - A syslog priority. - - - Generate a syslog priority. - - - - - - The facility. The default facility is . - - - - - The message identity - - - - - Mapping from level object to syslog severity - - - - - Message identity - - - - An identifier is specified with each log message. This can be specified - by setting the property. The identity (also know - as the tag) must not contain white space. The default value for the - identity is the application name (from ). - - - - - - Syslog facility - - - Set to one of the values. The list of - facilities is predefined and cannot be extended. The default value - is . - - - - - syslog severities - - - - The syslog severities. - - - - - - system is unusable - - - - - action must be taken immediately - - - - - critical conditions - - - - - error conditions - - - - - warning conditions - - - - - normal but significant condition - - - - - informational - - - - - debug-level messages - - - - - syslog facilities - - - - The syslog facilities - - - - - - kernel messages - - - - - random user-level messages - - - - - mail system - - - - - system daemons - - - - - security/authorization messages - - - - - messages generated internally by syslogd - - - - - line printer subsystem - - - - - network news subsystem - - - - - UUCP subsystem - - - - - clock (cron/at) daemon - - - - - security/authorization messages (private) - - - - - ftp daemon - - - - - NTP subsystem - - - - - log audit - - - - - log alert - - - - - clock daemon - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - reserved for local use - - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - A class to act as a mapping between the level that a logging call is made at and - the syslog severity that is should be logged at. - - - - - - The mapped syslog severity for the specified level - - - - Required property. - The mapped syslog severity for the specified level - - - - - - Appender that rolls log files based on size or date or both. - - - - RollingFileAppender can roll log files based on size or date or both - depending on the setting of the property. - When set to the log file will be rolled - once its size exceeds the . - When set to the log file will be rolled - once the date boundary specified in the property - is crossed. - When set to the log file will be - rolled once the date boundary specified in the property - is crossed, but within a date boundary the file will also be rolled - once its size exceeds the . - When set to the log file will be rolled when - the appender is configured. This effectively means that the log file can be - rolled once per program execution. - - - A of few additional optional features have been added: - - Attach date pattern for current log file - Backup number increments for newer files - Infinite number of backups by file size - - - - - - For large or infinite numbers of backup files a - greater than zero is highly recommended, otherwise all the backup files need - to be renamed each time a new backup is created. - - - When Date/Time based rolling is used setting - to will reduce the number of file renamings to few or none. - - - - - - Changing or without clearing - the log file directory of backup files will cause unexpected and unwanted side effects. - - - - - If Date/Time based rolling is enabled this appender will attempt to roll existing files - in the directory without a Date/Time tag based on the last write date of the base log file. - The appender only rolls the log file when a message is logged. If Date/Time based rolling - is enabled then the appender will not roll the log file at the Date/Time boundary but - at the point when the next message is logged after the boundary has been crossed. - - - - The extends the and - has the same behavior when opening the log file. - The appender will first try to open the file for writing when - is called. This will typically be during configuration. - If the file cannot be opened for writing the appender will attempt - to open the file again each time a message is logged to the appender. - If the file cannot be opened for writing when a message is logged then - the message will be discarded by this appender. - - - When rolling a backup file necessitates deleting an older backup file the - file to be deleted is moved to a temporary name before being deleted. - - - - - A maximum number of backup files when rolling on date/time boundaries is not supported. - - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - Edward Smit - - - - Initializes a new instance of the class. - - - - Default constructor. - - - - - - Sets the quiet writer being used. - - - This method can be overridden by sub classes. - - the writer to set - - - - Write out a logging event. - - the event to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Write out an array of logging events. - - the events to write to file. - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Performs any required rolling before outputting the next event - - - - Handles append time behavior for RollingFileAppender. This checks - if a roll over either by date (checked first) or time (checked second) - is need and then appends to the file last. - - - - - - Creates and opens the file for logging. If - is false then the fully qualified name is determined and used. - - the name of the file to open - true to append to existing file - - This method will ensure that the directory structure - for the specified exists. - - - - - Get the current output file name - - the base file name - the output file name - - The output file name is based on the base fileName specified. - If is set then the output - file name is the same as the base file passed in. Otherwise - the output file depends on the date pattern, on the count - direction or both. - - - - - Determines curSizeRollBackups (only within the current roll point) - - - - - Generates a wildcard pattern that can be used to find all files - that are similar to the base file name. - - - - - - - Builds a list of filenames for all files matching the base filename plus a file - pattern. - - - - - - - Initiates a roll over if needed for crossing a date boundary since the last run. - - - - - Initializes based on existing conditions at time of . - - - - Initializes based on existing conditions at time of . - The following is done - - determine curSizeRollBackups (only within the current roll point) - initiates a roll over if needed for crossing a date boundary since the last run. - - - - - - - Does the work of bumping the 'current' file counter higher - to the highest count when an incremental file name is seen. - The highest count is either the first file (when count direction - is greater than 0) or the last file (when count direction less than 0). - In either case, we want to know the highest count that is present. - - - - - - - Takes a list of files and a base file name, and looks for - 'incremented' versions of the base file. Bumps the max - count up to the highest count seen. - - - - - - - Calculates the RollPoint for the datePattern supplied. - - the date pattern to calculate the check period for - The RollPoint that is most accurate for the date pattern supplied - - Essentially the date pattern is examined to determine what the - most suitable roll point is. The roll point chosen is the roll point - with the smallest period that can be detected using the date pattern - supplied. i.e. if the date pattern only outputs the year, month, day - and hour then the smallest roll point that can be detected would be - and hourly roll point as minutes could not be detected. - - - - - Initialize the appender based on the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Sets initial conditions including date/time roll over information, first check, - scheduledFilename, and calls to initialize - the current number of backups. - - - - - - Rollover the file(s) to date/time tagged file(s). - - set to true if the file to be rolled is currently open - - - Rollover the file(s) to date/time tagged file(s). - Resets curSizeRollBackups. - If fileIsOpen is set then the new file is opened (through SafeOpenFile). - - - - - - Renames file to file . - - Name of existing file to roll. - New name for file. - - - Renames file to file . It - also checks for existence of target file and deletes if it does. - - - - - - Test if a file exists at a specified path - - the path to the file - true if the file exists - - - Test if a file exists at a specified path - - - - - - Deletes the specified file if it exists. - - The file to delete. - - - Delete a file if is exists. - The file is first moved to a new filename then deleted. - This allows the file to be removed even when it cannot - be deleted, but it still can be moved. - - - - - - Implements file roll base on file size. - - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. Moreover, File is - renamed File.1 and closed. - - - A new file is created to receive further log output. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - - - - Implements file roll. - - the base name to rename - - - If the maximum number of size based backups is reached - (curSizeRollBackups == maxSizeRollBackups) then the oldest - file is deleted -- its index determined by the sign of countDirection. - If countDirection < 0, then files - {File.1, ..., File.curSizeRollBackups -1} - are renamed to {File.2, ..., - File.curSizeRollBackups}. - - - If maxSizeRollBackups is equal to zero, then the - File is truncated with no backup files created. - - - If maxSizeRollBackups < 0, then File is - renamed if needed and no files are deleted. - - - This is called by to rename the files. - - - - - - Get the start time of the next window for the current rollpoint - - the current date - the type of roll point we are working with - the start time for the next roll point an interval after the currentDateTime date - - - Returns the date of the next roll point after the currentDateTime date passed to the method. - - - The basic strategy is to subtract the time parts that are less significant - than the rollpoint from the current time. This should roll the time back to - the start of the time window for the current rollpoint. Then we add 1 window - worth of time and get the start time of the next window for the rollpoint. - - - - - - This object supplies the current date/time. Allows test code to plug in - a method to control this class when testing date/time based rolling. - - - - - The date pattern. By default, the pattern is set to ".yyyy-MM-dd" - meaning daily rollover. - - - - - The actual formatted filename that is currently being written to - or will be the file transferred to on roll over - (based on staticLogFileName). - - - - - The timestamp when we shall next recompute the filename. - - - - - Holds date of last roll over - - - - - The type of rolling done - - - - - The default maximum file size is 10MB - - - - - There is zero backup files by default - - - - - How many sized based backups have been made so far - - - - - The rolling file count direction. - - - - - The rolling mode used in this appender. - - - - - Cache flag set if we are rolling by date. - - - - - Cache flag set if we are rolling by size. - - - - - Value indicating whether to always log to the same file. - - - - - FileName provided in configuration. Used for rolling properly - - - - - The 1st of January 1970 in UTC - - - - - Gets or sets the date pattern to be used for generating file names - when rolling over on date. - - - The date pattern to be used for generating file names when rolling - over on date. - - - - Takes a string in the same format as expected by - . - - - This property determines the rollover schedule when rolling over - on date. - - - - - - Gets or sets the maximum number of backup files that are kept before - the oldest is erased. - - - The maximum number of backup files that are kept before the oldest is - erased. - - - - If set to zero, then there will be no backup files and the log file - will be truncated when it reaches . - - - If a negative number is supplied then no deletions will be made. Note - that this could result in very slow performance as a large number of - files are rolled over unless is used. - - - The maximum applies to each time based group of files and - not the total. - - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size in bytes that the output file is allowed to reach before being - rolled over to backup files. - - - - This property is equivalent to except - that it is required for differentiating the setter taking a - argument from the setter taking a - argument. - - - The default maximum file size is 10MB (10*1024*1024). - - - - - - Gets or sets the maximum size that the output file is allowed to reach - before being rolled over to backup files. - - - The maximum size that the output file is allowed to reach before being - rolled over to backup files. - - - - This property allows you to specify the maximum size with the - suffixes "KB", "MB" or "GB" so that the size is interpreted being - expressed respectively in kilobytes, megabytes or gigabytes. - - - For example, the value "10KB" will be interpreted as 10240 bytes. - - - The default maximum file size is 10MB. - - - If you have the option to set the maximum file size programmatically - consider using the property instead as this - allows you to set the size in bytes as a . - - - - - - Gets or sets the rolling file count direction. - - - The rolling file count direction. - - - - Indicates if the current file is the lowest numbered file or the - highest numbered file. - - - By default newer files have lower numbers ( < 0), - i.e. log.1 is most recent, log.5 is the 5th backup, etc... - - - >= 0 does the opposite i.e. - log.1 is the first backup made, log.5 is the 5th backup made, etc. - For infinite backups use >= 0 to reduce - rollover costs. - - The default file count direction is -1. - - - - - Gets or sets the rolling style. - - The rolling style. - - - The default rolling style is . - - - When set to this appender's - property is set to false, otherwise - the appender would append to a single file rather than rolling - the file each time it is opened. - - - - - - Gets or sets a value indicating whether to always log to - the same file. - - - true if always should be logged to the same file, otherwise false. - - - - By default file.log is always the current file. Optionally - file.log.yyyy-mm-dd for current formatted datePattern can by the currently - logging file (or file.log.curSizeRollBackup or even - file.log.yyyy-mm-dd.curSizeRollBackup). - - - This will make time based rollovers with a large number of backups - much faster as the appender it won't have to rename all the backups! - - - - - - Style of rolling to use - - - - Style of rolling to use - - - - - - Roll files once per program execution - - - - Roll files once per program execution. - Well really once each time this appender is - configured. - - - Setting this option also sets AppendToFile to - false on the RollingFileAppender, otherwise - this appender would just be a normal file appender. - - - - - - Roll files based only on the size of the file - - - - - Roll files based only on the date - - - - - Roll files based on both the size and date of the file - - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - The code assumes that the following 'time' constants are in a increasing sequence. - - - - - - Roll the log not based on the date - - - - - Roll the log for each minute - - - - - Roll the log for each hour - - - - - Roll the log twice a day (midday and midnight) - - - - - Roll the log each day (midnight) - - - - - Roll the log each week - - - - - Roll the log each month - - - - - This interface is used to supply Date/Time information to the . - - - This interface is used to supply Date/Time information to the . - Used primarily to allow test classes to plug themselves in so they can - supply test date/times. - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Default implementation of that returns the current time. - - - - - Gets the current time. - - The current time. - - - Gets the current time. - - - - - - Send an email when a specific logging event occurs, typically on errors - or fatal errors. Rather than sending via smtp it writes a file into the - directory specified by . This allows services such - as the IIS SMTP agent to manage sending the messages. - - - - The configuration for this appender is identical to that of the SMTPAppender, - except that instead of specifying the SMTPAppender.SMTPHost you specify - . - - - The number of logging events delivered in this e-mail depend on - the value of option. The - keeps only the last - logging events in its - cyclic buffer. This keeps memory requirements at a reasonable level while - still delivering useful application context. - - - Niall Daley - Nicko Cadell - - - - Default constructor - - - - Default constructor - - - - - - Sends the contents of the cyclic buffer as an e-mail message. - - The logging events to send. - - - Sends the contents of the cyclic buffer as an e-mail message. - - - - - - Activate the options on this appender. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Convert a path into a fully qualified path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - - - - The security context to use for privileged calls - - - - - Gets or sets a semicolon-delimited list of recipient e-mail addresses. - - - A semicolon-delimited list of e-mail addresses. - - - - A semicolon-delimited list of e-mail addresses. - - - - - - Gets or sets the e-mail address of the sender. - - - The e-mail address of the sender. - - - - The e-mail address of the sender. - - - - - - Gets or sets the subject line of the e-mail message. - - - The subject line of the e-mail message. - - - - The subject line of the e-mail message. - - - - - - Gets or sets the path to write the messages to. - - - - Gets or sets the path to write the messages to. This should be the same - as that used by the agent sending the messages. - - - - - - Gets or sets the used to write to the pickup directory. - - - The used to write to the pickup directory. - - - - Unless a specified here for this appender - the is queried for the - security context to use. The default behavior is to use the security context - of the current thread. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Appender that allows clients to connect via Telnet to receive log messages - - - - The TelnetAppender accepts socket connections and streams logging messages - back to the client. - The output is provided in a telnet-friendly way so that a log can be monitored - over a TCP/IP socket. - This allows simple remote monitoring of application logging. - - - The default is 23 (the telnet port). - - - Keith Long - Nicko Cadell - - - - Default constructor - - - - Default constructor - - - - - - Overrides the parent method to close the socket handler - - - - Closes all the outstanding connections. - - - - - - Initialize the appender based on the options set. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Create the socket handler and wait for connections - - - - - - Writes the logging event to each connected client. - - The event to log. - - - Writes the logging event to each connected client. - - - - - - Gets or sets the TCP port number on which this will listen for connections. - - - An integer value in the range to - indicating the TCP port number on which this will listen for connections. - - - - The default value is 23 (the telnet port). - - - The value specified is less than - or greater than . - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Helper class to manage connected clients - - - - The SocketHandler class is used to accept connections from - clients. It is threaded so that clients can connect/disconnect - asynchronously. - - - - - - Opens a new server port on - - the local port to listen on for connections - - - Creates a socket handler on the specified local server port. - - - - - - Sends a string message to each of the connected clients - - the text to send - - - Sends a string message to each of the connected clients - - - - - - Add a client to the internal clients list - - client to add - - - - Remove a client from the internal clients list - - client to remove - - - - Callback used to accept a connection on the server socket - - The result of the asynchronous operation - - - On connection adds to the list of connections - if there are two many open connections you will be disconnected - - - - - - Close all network connections - - - - Make sure we close all network connections - - - - - - Test if this handler has active connections - - - true if this handler has active connections - - - - This property will be true while this handler has - active connections, that is at least one connection that - the handler will attempt to send a message to. - - - - - - Class that represents a client connected to this handler - - - - Class that represents a client connected to this handler - - - - - - Create this for the specified - - the client's socket - - - Opens a stream writer on the socket. - - - - - - Write a string to the client - - string to send - - - Write a string to the client - - - - - - Cleanup the clients connection - - - - Close the socket connection. - - - - - - Appends log events to the system. - - - - The application configuration file can be used to control what listeners - are actually used. See the MSDN documentation for the - class for details on configuring the - trace system. - - - Events are written using the System.Diagnostics.Trace.Write(string,string) - method. The event's logger name is passed as the value for the category name to the Write method. - - - Compact Framework
    - The Compact Framework does not support the - class for any operation except Assert. When using the Compact Framework this - appender will write to the system rather than - the Trace system. This appender will therefore behave like the . -
    -
    - Douglas de la Torre - Nicko Cadell - Gert Driesen -
    - - - Initializes a new instance of the . - - - - Default constructor. - - - - - - Initializes a new instance of the - with a specified layout. - - The layout to use with this appender. - - - Obsolete constructor. - - - - - - Writes the logging event to the system. - - The event to log. - - - Writes the logging event to the system. - - - - - - Immediate flush means that the underlying writer or output stream - will be flushed at the end of each append operation. - - - - Immediate flush is slower but ensures that each append request is - actually written. If is set to - false, then there is a good chance that the last few - logs events are not actually written to persistent media if and - when the application crashes. - - - The default value is true. - - - - - Gets or sets a value that indicates whether the appender will - flush at the end of each write. - - - The default behavior is to flush at the end of each - write. If the option is set tofalse, then the underlying - stream can defer writing to physical medium to a later time. - - - Avoiding the flush operation at the end of each append results - in a performance gain of 10 to 20 percent. However, there is safety - trade-off involved in skipping flushing. Indeed, when flushing is - skipped, then it is likely that the last few log events will not - be recorded on disk when the application exits. This is a high - price to pay even for a 20% performance gain. - - - - - - This appender requires a to be set. - - true - - - This appender requires a to be set. - - - - - - Use this class to quickly configure a . - - - - Allows very simple programmatic configuration of log4net. - - - Only one appender can be configured using this configurator. - The appender is set at the root of the hierarchy and all logging - events will be delivered to that appender. - - - Appenders can also implement the interface. Therefore - they would require that the method - be called after the appenders properties have been configured. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Initializes the log4net system with a default configuration. - - - - Initializes the log4net logging system using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - - Initializes the log4net system using the specified appender. - - The appender to use to log all logging events. - - - Initializes the log4net system using the specified appender. - - - - - - Initializes the with a default configuration. - - The repository to configure. - - - Initializes the specified repository using a - that will write to Console.Out. The log messages are - formatted using the layout object - with the - layout style. - - - - - - Initializes the using the specified appender. - - The repository to configure. - The appender to use to log all logging events. - - - Initializes the using the specified appender. - - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - The repository to configure. - - - - Configures log4net using a log4net element - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The element to parse. - - - - Configures the using the specified XML - element. - - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures log4net using the specified configuration file. - - A stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The log4net configuration file can possible be specified in the application's - configuration file (either MyAppName.exe.config for a - normal application on Web.config for an ASP.NET application). - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - DOMConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - DOMConfigurator is obsolete. Use XmlConfigurator instead of DOMConfigurator. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Use this class to initialize the log4net environment using an Xml tree. - - - - Configures a using an Xml tree. - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - - - Automatically configures the log4net system based on the - application's configuration settings. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - - - - Automatically configures the using settings - stored in the application's configuration file. - - - - Each application has a configuration file. This has the - same name as the application with '.config' appended. - This file is XML and calling this function prompts the - configurator to look in that file for a section called - log4net that contains the configuration data. - - - The repository to configure. - - - - Configures log4net using a log4net element - - - - Loads the log4net configuration from the XML element - supplied as . - - - The element to parse. - - - - Configures the using the specified XML - element. - - - Loads the log4net configuration from the XML element - supplied as . - - The repository to configure. - The element to parse. - - - - Configures log4net using the specified configuration file. - - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures log4net using the specified configuration URI. - - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - The must support the URI scheme specified. - - - - - - Configures log4net using the specified configuration data stream. - - A stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the log4net configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The XML file to load the configuration from. - - - The configuration file must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The following example configures log4net using a configuration file, of which the - location is stored in the application's configuration file : - - - using log4net.Config; - using System.IO; - using System.Configuration; - - ... - - XmlConfigurator.Configure(new FileInfo(ConfigurationSettings.AppSettings["log4net-config-file"])); - - - In the .config file, the path to the log4net can be specified like this : - - - - - - - - - - - - - Configures the using the specified configuration - URI. - - The repository to configure. - A URI to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - The must support the URI scheme specified. - - - - - - Configures the using the specified configuration - file. - - The repository to configure. - The stream to load the XML configuration from. - - - The configuration data must be valid XML. It must contain - at least one element called log4net that holds - the configuration data. - - - Note that this method will NOT close the stream parameter. - - - - - - Configures the specified repository using a log4net element. - - The hierarchy to configure. - The element to parse. - - - Loads the log4net configuration from the XML element - supplied as . - - - This method is ultimately called by one of the Configure methods - to load the configuration from an . - - - - - - The implementation of the interface suitable - for use with the compact framework - - - - This implementation is a simple - mapping between repository name and - object. - - - The .NET Compact Framework 1.0 does not support retrieving assembly - level attributes therefore unlike the DefaultRepositorySelector - this selector does not examine the calling assembly for attributes. - - - Nicko Cadell - - - - Interface used by the to select the . - - - - The uses a - to specify the policy for selecting the correct - to return to the caller. - - - Nicko Cadell - Gert Driesen - - - - Gets the for the specified assembly. - - The assembly to use to lookup to the - The for the assembly. - - - Gets the for the specified assembly. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. The results of this method must be repeatable, i.e. - when called again with the same arguments the result must be the - save value. - - - - - - Gets the named . - - The name to use to lookup to the . - The named - - Lookup a named . This is the repository created by - calling . - - - - - Creates a new repository for the assembly specified. - - The assembly to use to create the domain to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the domain - specified such that a call to with the - same assembly specified will return the same repository instance. - - - How the association between and - is made is not defined. The implementation may choose any method for - this association. - - - - - - Creates a new repository with the name specified. - - The name to associate with the . - The type of repository to create, must implement . - The repository created. - - - The created will be associated with the name - specified such that a call to with the - same name will return the same repository instance. - - - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets an array of all currently defined repositories. - - - An array of the instances created by - this . - - - Gets an array of all of the repositories created by this selector. - - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - Create a new repository selector - - the type of the repositories to create, must implement - - - Create an new compact repository selector. - The default type for repositories must be specified, - an appropriate value would be . - - - throw if is null - throw if does not implement - - - - Get the for the specified assembly - - not used - The default - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - - Get the named - - the name of the repository to lookup - The named - - - Get the named . The default - repository is log4net-default-repository. Other repositories - must be created using the . - If the named repository does not exist an exception is thrown. - - - throw if is null - throw if the does not exist - - - - Create a new repository for the assembly specified - - not used - the type of repository to create, must implement - the repository created - - - The argument is not used. This selector does not create a - separate repository for each assembly. - - - If the is null then the - default repository type specified to the constructor is used. - - - As a named repository is not specified the default repository is - returned. The default repository is named log4net-default-repository. - - - - - - Create a new repository for the repository specified - - the repository to associate with the - the type of repository to create, must implement . - If this param is null then the default repository type is used. - the repository created - - - The created will be associated with the repository - specified such that a call to with the - same repository specified will return the same repository instance. - - - If the named repository already exists an exception will be thrown. - - - If is null then the default - repository type specified to the constructor is used. - - - throw if is null - throw if the already exists - - - - Test if a named repository exists - - the named repository to check - true if the repository exists - - - Test if a named repository exists. Use - to create a new repository and to retrieve - a repository. - - - - - - Gets a list of objects - - an array of all known objects - - - Gets an array of all of the repositories created by this selector. - - - - - - Notify the registered listeners that the repository has been created - - The repository that has been created - - - Raises the LoggerRepositoryCreatedEvent - event. - - - - - - Event to notify that a logger repository has been created. - - - Event to notify that a logger repository has been created. - - - - Event raised when a new repository is created. - The event source will be this selector. The event args will - be a which - holds the newly created . - - - - - - Defined error codes that can be passed to the method. - - - - Values passed to the method. - - - Nicko Cadell - - - - A general error - - - - - Error while writing output - - - - - Failed to flush file - - - - - Failed to close file - - - - - Unable to open output file - - - - - No layout specified - - - - - Failed to parse address - - - - - Appenders may delegate their error handling to an . - - - - Error handling is a particularly tedious to get right because by - definition errors are hard to predict and to reproduce. - - - Nicko Cadell - Gert Driesen - - - - Handles the error and information about the error condition is passed as - a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - The error code associated with the error. - - - Handles the error and information about the error condition is passed as - a parameter. - - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - The that was thrown when the error occurred. - - - See . - - - - - - Prints the error message passed as a parameter. - - The message associated with the error. - - - See . - - - - - - Interface for objects that require fixing. - - - - Interface that indicates that the object requires fixing before it - can be taken outside the context of the appender's - method. - - - When objects that implement this interface are stored - in the context properties maps - and - are fixed - (see ) the - method will be called. - - - Nicko Cadell - - - - Get a portable version of this object - - the portable instance of this object - - - Get a portable instance object that represents the current - state of this object. The portable object can be stored - and logged from any thread with identical results. - - - - - - Interface that all loggers implement - - - - This interface supports logging events and testing if a level - is enabled for logging. - - - These methods will not throw exceptions. Note to implementor, ensure - that the implementation of these methods cannot allow an exception - to be thrown to the caller. - - - Nicko Cadell - Gert Driesen - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - the exception to log, including its stack trace. Pass null to not log an exception. - - - Generates a logging event for the specified using - the and . - - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - - - - Gets the name of the logger. - - - The name of the logger. - - - - The name of this logger - - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - - Base interface for all wrappers - - - - Base interface for all wrappers. - - - All wrappers must implement this interface. - - - Nicko Cadell - - - - Get the implementation behind this wrapper object. - - - The object that in implementing this object. - - - - The object that in implementing this - object. The Logger object may not - be the same object as this object because of logger decorators. - This gets the actual underlying objects that is used to process - the log events. - - - - - - Delegate used to handle logger repository creation event notifications - - The which created the repository. - The event args - that holds the instance that has been created. - - - Delegate used to handle logger repository creation event notifications. - - - - - - Provides data for the event. - - - - A - event is raised every time a is created. - - - - - - The created - - - - - Construct instance using specified - - the that has been created - - - Construct instance using specified - - - - - - The that has been created - - - The that has been created - - - - The that has been created - - - - - - Test if an triggers an action - - - - Implementations of this interface allow certain appenders to decide - when to perform an appender specific action. - - - The action or behavior triggered is defined by the implementation. - - - Nicko Cadell - - - - Test if this event triggers the action - - The event to check - true if this event triggers the action, otherwise false - - - Return true if this event triggers the action - - - - - - Defines the default set of levels recognized by the system. - - - - Each has an associated . - - - Levels have a numeric that defines the relative - ordering between levels. Two Levels with the same - are deemed to be equivalent. - - - The levels that are recognized by log4net are set for each - and each repository can have different levels defined. The levels are stored - in the on the repository. Levels are - looked up by name from the . - - - When logging at level INFO the actual level used is not but - the value of LoggerRepository.LevelMap["INFO"]. The default value for this is - , but this can be changed by reconfiguring the level map. - - - Each level has a in addition to its . The - is the string that is written into the output log. By default - the display name is the same as the level name, but this can be used to alias levels - or to localize the log output. - - - Some of the predefined levels recognized by the system are: - - - - . - - - . - - - . - - - . - - - . - - - . - - - . - - - - Nicko Cadell - Gert Driesen - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - The display name for this level. This may be localized or otherwise different from the name - - - Initializes a new instance of the class with - the specified level name and value. - - - - - - Constructor - - Integer value for this level, higher values represent more severe levels. - The string name of this level. - - - Initializes a new instance of the class with - the specified level name and value. - - - - - - Returns the representation of the current - . - - - A representation of the current . - - - - Returns the level . - - - - - - Compares levels. - - The object to compare against. - true if the objects are equal. - - - Compares the levels of instances, and - defers to base class if the target object is not a - instance. - - - - - - Returns a hash code - - A hash code for the current . - - - Returns a hash code suitable for use in hashing algorithms and data - structures like a hash table. - - - Returns the hash code of the level . - - - - - - Compares this instance to a specified object and returns an - indication of their relative values. - - A instance or to compare with this instance. - - A 32-bit signed integer that indicates the relative order of the - values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - This instance is less than . - - - Zero - This instance is equal to . - - - Greater than zero - - This instance is greater than . - -or- - is . - - - - - - - must be an instance of - or ; otherwise, an exception is thrown. - - - is not a . - - - - Returns a value indicating whether a specified - is greater than another specified . - - A - A - - true if is greater than - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is less than another specified . - - A - A - - true if is less than - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is greater than or equal to another specified . - - A - A - - true if is greater than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether a specified - is less than or equal to another specified . - - A - A - - true if is less than or equal to - ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether two specified - objects have the same value. - - A or . - A or . - - true if the value of is the same as the - value of ; otherwise, false. - - - - Compares two levels. - - - - - - Returns a value indicating whether two specified - objects have different values. - - A or . - A or . - - true if the value of is different from - the value of ; otherwise, false. - - - - Compares two levels. - - - - - - Compares two specified instances. - - The first to compare. - The second to compare. - - A 32-bit signed integer that indicates the relative order of the - two values compared. The return value has these meanings: - - - Value - Meaning - - - Less than zero - is less than . - - - Zero - is equal to . - - - Greater than zero - is greater than . - - - - - - Compares two levels. - - - - - - The level designates a higher level than all the rest. - - - - - The level designates very severe error events. - System unusable, emergencies. - - - - - The level designates very severe error events - that will presumably lead the application to abort. - - - - - The level designates very severe error events. - Take immediate action, alerts. - - - - - The level designates very severe error events. - Critical condition, critical. - - - - - The level designates very severe error events. - - - - - The level designates error events that might - still allow the application to continue running. - - - - - The level designates potentially harmful - situations. - - - - - The level designates informational messages - that highlight the progress of the application at the highest level. - - - - - The level designates informational messages that - highlight the progress of the application at coarse-grained level. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates fine-grained informational - events that are most useful to debug an application. - - - - - The level designates the lowest level possible. - - - - - Gets the name of this level. - - - The name of this level. - - - - Gets the name of this level. - - - - - - Gets the value of this level. - - - The value of this level. - - - - Gets the value of this level. - - - - - - Gets the display name of this level. - - - The display name of this level. - - - - Gets the display name of this level. - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a LevelCollection instance. - - list to create a readonly wrapper arround - - A LevelCollection wrapper that is read-only. - - - - - Initializes a new instance of the LevelCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the LevelCollection class - that has the specified initial capacity. - - - The number of elements that the new LevelCollection is initially capable of storing. - - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified LevelCollection. - - The LevelCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the LevelCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - Copies the entire LevelCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire LevelCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the LevelCollection. - - The to be added to the end of the LevelCollection. - The index at which the value has been added. - - - - Removes all elements from the LevelCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the LevelCollection. - - The to check for. - true if is found in the LevelCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the LevelCollection. - - The to locate in the LevelCollection. - - The zero-based index of the first occurrence of - in the entire LevelCollection, if found; otherwise, -1. - - - - - Inserts an element into the LevelCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the LevelCollection. - - The to remove from the LevelCollection. - - The specified was not found in the LevelCollection. - - - - - Removes the element at the specified index of the LevelCollection. - - The zero-based index of the element to remove. - - is less than zero - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the LevelCollection. - - An for the entire LevelCollection. - - - - Adds the elements of another LevelCollection to the current LevelCollection. - - The LevelCollection whose elements should be added to the end of the current LevelCollection. - The new of the LevelCollection. - - - - Adds the elements of a array to the current LevelCollection. - - The array whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - - Adds the elements of a collection to the current LevelCollection. - - The collection whose elements should be added to the end of the LevelCollection. - The new of the LevelCollection. - - - - Sets the capacity to the actual number of elements. - - - - - is less than zero - -or- - is equal to or greater than . - - - - - is less than zero - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the LevelCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - The zero-based index of the element to get or set. - - is less than zero - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false - - - - Gets or sets the number of elements the LevelCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - A value - - - - - Supports simple iteration over a . - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - An evaluator that triggers at a threshold level - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - Nicko Cadell - - - - The threshold for triggering - - - - - Create a new evaluator using the threshold. - - - - Create a new evaluator using the threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Create a new evaluator using the specified threshold. - - the threshold to trigger at - - - Create a new evaluator using the specified threshold. - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Is this the triggering event? - - The event to check - This method returns true, if the event level - is equal or higher than the . - Otherwise it returns false - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - the threshold to trigger at - - - The that will cause this evaluator to trigger - - - - This evaluator will trigger if the level of the event - passed to - is equal to or greater than the - level. - - - - - - Mapping between string name and Level object - - - - Mapping between string name and object. - This mapping is held separately for each . - The level name is case insensitive. - - - Nicko Cadell - - - - Mapping from level name to Level object. The - level name is case insensitive - - - - - Construct the level map - - - - Construct the level map. - - - - - - Clear the internal maps of all levels - - - - Clear the internal maps of all levels - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - - - Create a new Level and add it to the map - - - - - - - Create a new Level and add it to the map - - the string to display for the Level - the level value to give to the Level - the display name to give to the Level - - - Create a new Level and add it to the map - - - - - - Add a Level to the map - - the Level to add - - - Add a Level to the map - - - - - - Lookup a named level from the map - - the name of the level to lookup is taken from this level. - If the level is not set on the map then this level is added - the level in the map with the name specified - - - Lookup a named level from the map. The name of the level to lookup is taken - from the property of the - argument. - - - If no level with the specified name is found then the - argument is added to the level map - and returned. - - - - - - Lookup a by name - - The name of the Level to lookup - a Level from the map with the name specified - - - Returns the from the - map with the name specified. If the no level is - found then null is returned. - - - - - - Return all possible levels as a list of Level objects. - - all possible levels as a list of Level objects - - - Return all possible levels as a list of Level objects. - - - - - - The internal representation of caller location information. - - - - This class uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. - - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - Nicko Cadell - Gert Driesen - - - - When location information is not available the constant - NA is returned. Current value of this string - constant is ?. - - - - - Constructor - - The declaring type of the method that is - the stack boundary into the logging system for this call. - - - Initializes a new instance of the - class based on the current thread. - - - - - - Constructor - - The fully qualified class name. - The method name. - The file name. - The line number of the method within the file. - - - Initializes a new instance of the - class with the specified data. - - - - - - Gets the fully qualified class name of the caller making the logging - request. - - - The fully qualified class name of the caller making the logging - request. - - - - Gets the fully qualified class name of the caller making the logging - request. - - - - - - Gets the file name of the caller. - - - The file name of the caller. - - - - Gets the file name of the caller. - - - - - - Gets the line number of the caller. - - - The line number of the caller. - - - - Gets the line number of the caller. - - - - - - Gets the method name of the caller. - - - The method name of the caller. - - - - Gets the method name of the caller. - - - - - - Gets all available caller information - - - All available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - Gets all available caller information, in the format - fully.qualified.classname.of.caller.methodName(Filename:line) - - - - - - Static manager that controls the creation of repositories - - - - Static manager that controls the creation of repositories - - - This class is used by the wrapper managers (e.g. ) - to provide access to the objects. - - - This manager also holds the that is used to - lookup and create repositories. The selector can be set either programmatically using - the property, or by setting the log4net.RepositorySelector - AppSetting in the applications config file to the fully qualified type name of the - selector to use. - - - Nicko Cadell - Gert Driesen - - - - Private constructor to prevent instances. Only static methods should be used. - - - - Private constructor to prevent instances. Only static methods should be used. - - - - - - Hook the shutdown event - - - - On the full .NET runtime, the static constructor hooks up the - AppDomain.ProcessExit and AppDomain.DomainUnload> events. - These are used to shutdown the log4net system as the application exits. - - - - - - Register for ProcessExit and DomainUnload events on the AppDomain - - - - This needs to be in a separate method because the events make - a LinkDemand for the ControlAppDomain SecurityPermission. Because - this is a LinkDemand it is demanded at JIT time. Therefore we cannot - catch the exception in the method itself, we have to catch it in the - caller. - - - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - - Return the default instance. - - the repository to lookup in - Return the default instance - - - Gets the for the repository specified - by the argument. - - - - - - Returns the default instance. - - The assembly to use to lookup the repository. - The default instance. - - - Returns the default instance. - - - - - - Returns the named logger if it exists. - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified repository. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - - Returns the named logger if it exists. - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger found, or null if the named logger does not exist in the - specified assembly's repository. - - - - If the named logger exists (in the specified assembly's repository) then it - returns a reference to the logger, otherwise it returns - null. - - - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - All the defined loggers. - - - The root logger is not included in the returned array. - - - - - - Retrieves or creates a named logger. - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - - Retrieves or creates a named logger. - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - - - - Shorthand for . - - The repository to lookup in. - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - - Shorthand for . - - the assembly to use to lookup the repository - The of which the fullname will be used as the name of the logger to retrieve. - The logger with the name specified. - - - Gets the logger for the fully qualified name of the type specified. - - - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - The repository to shutdown. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - The assembly to use to lookup the repository. - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository for the repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Resets all values contained in this repository instance to their defaults. - - The repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - - Resets all values contained in this repository instance to their defaults. - - The assembly to use to lookup the repository to reset. - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name. - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The name must be unique. Repositories cannot be redefined. - An Exception will be thrown if the repository already exists. - - - The specified repository already exists. - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - - Creates a repository for the specified assembly and repository type. - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - - - - Gets an array of all currently defined repositories. - - An array of all the known objects. - - - Gets an array of all currently defined repositories. - - - - - - Internal method to get pertinent version info. - - A string of version info. - - - - Initialize the default repository selector - - - - - Gets or sets the repository selector used by the . - - - The repository selector used by the . - - - - The repository selector () is used by - the to create and select repositories - (). - - - The caller to supplies either a string name - or an assembly (if not supplied the assembly is inferred using - ). - - - This context is used by the selector to lookup a specific repository. - - - For the full .NET Framework, the default repository is DefaultRepositorySelector; - for the .NET Compact Framework CompactRepositorySelector is the default - repository. - - - - - - Implementation of the interface. - - - - This class should be used as the base for all wrapper implementations. - - - Nicko Cadell - Gert Driesen - - - - Constructs a new wrapper for the specified logger. - - The logger to wrap. - - - Constructs a new wrapper for the specified logger. - - - - - - The logger that this object is wrapping - - - - - Gets the implementation behind this wrapper object. - - - The object that this object is implementing. - - - - The Logger object may not be the same object as this object - because of logger decorators. - - - This gets the actual underlying objects that is used to process - the log events. - - - - - - Portable data structure used by - - - - Portable data structure used by - - - Nicko Cadell - - - - The logger name. - - - - The logger name. - - - - - - Level of logging event. - - - - Level of logging event. Level cannot be Serializable - because it is a flyweight. Due to its special serialization it - cannot be declared final either. - - - - - - The application supplied message. - - - - The application supplied message of logging event. - - - - - - The name of thread - - - - The name of thread in which this logging event was generated - - - - - - The time the event was logged - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - - Location information for the caller. - - - - Location information for the caller. - - - - - - String representation of the user - - - - String representation of the user's windows name, - like DOMAIN\username - - - - - - String representation of the identity. - - - - String representation of the current thread's principal identity. - - - - - - The string representation of the exception - - - - The string representation of the exception - - - - - - String representation of the AppDomain. - - - - String representation of the AppDomain. - - - - - - Additional event specific properties - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - - - - Flags passed to the property - - - - Flags passed to the property - - - Nicko Cadell - - - - Fix the MDC - - - - - Fix the NDC - - - - - Fix the rendered message - - - - - Fix the thread name - - - - - Fix the callers location information - - - CAUTION: Very slow to generate - - - - - Fix the callers windows user name - - - CAUTION: Slow to generate - - - - - Fix the domain friendly name - - - - - Fix the callers principal name - - - CAUTION: May be slow to generate - - - - - Fix the exception text - - - - - Fix the event properties - - - - - No fields fixed - - - - - All fields fixed - - - - - Partial fields fixed - - - - This set of partial fields gives good performance. The following fields are fixed: - - - - - - - - - - - - - The internal representation of logging events. - - - - When an affirmative decision is made to log then a - instance is created. This instance - is passed around to the different log4net components. - - - This class is of concern to those wishing to extend log4net. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino - - - - The key into the Properties map for the host name value. - - - - - The key into the Properties map for the thread identity value. - - - - - The key into the Properties map for the user name value. - - - - - Initializes a new instance of the class - from the supplied parameters. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - The name of the logger of this event. - The level of this event. - The message of this event. - The exception for this event. - - - Except , and , - all fields of LoggingEvent are filled when actually needed. Call - to cache all data locally - to prevent inconsistencies. - - This method is called by the log4net framework - to create a logging event. - - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - The fields in the struct that have already been fixed. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - The parameter should be used to specify which fields in the - struct have been preset. Fields not specified in the - will be captured from the environment if requested or fixed. - - - - - - Initializes a new instance of the class - using specific data. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The repository this event is logged in. - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - - Initializes a new instance of the class - using specific data. - - Data used to initialize the logging event. - - - This constructor is provided to allow a - to be created independently of the log4net framework. This can - be useful if you require a custom serialization scheme. - - - Use the method to obtain an - instance of the class. - - - This constructor sets this objects flags to , - this assumes that all the data relating to this event is passed in via the - parameter and no other data should be captured from the environment. - - - - - - Ensure that the repository is set. - - the value for the repository - - - - Write the rendered message to a TextWriter - - the writer to write the message to - - - Unlike the property this method - does store the message data in the internal cache. Therefore - if called only once this method should be faster than the - property, however if the message is - to be accessed multiple times then the property will be more efficient. - - - - - - Gets the portable data for this . - - The for this event. - - - A new can be constructed using a - instance. - - - Does a fix of the data - in the logging event before returning the event data. - - - - - - Gets the portable data for this . - - The set of data to ensure is fixed in the LoggingEventData - The for this event. - - - A new can be constructed using a - instance. - - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Obsolete. Use instead. - - - - - - Returns this event's exception's rendered using the - . - - - This event's exception's rendered using the . - - - - Returns this event's exception's rendered using the - . - - - - - - Fix instance fields that hold volatile data. - - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - incurred by calling but it - is essential to maintaining data consistency. - - - Calling is equivalent to - calling passing the parameter - false. - - - See for more - information. - - - - - - Fixes instance fields that hold volatile data. - - Set to true to not fix data that takes a long time to fix. - - - Some of the values in instances of - are considered volatile, that is the values are correct at the - time the event is delivered to appenders, but will not be consistent - at any time afterwards. If an event is to be stored and then processed - at a later time these volatile values must be fixed by calling - . There is a performance penalty - for incurred by calling but it - is essential to maintaining data consistency. - - - The param controls the data that - is fixed. Some of the data that can be fixed takes a long time to - generate, therefore if you do not require those settings to be fixed - they can be ignored by setting the param - to true. This setting will ignore the - and settings. - - - Set to false to ensure that all - settings are fixed. - - - - - - Fix the fields specified by the parameter - - the fields to fix - - - Only fields specified in the will be fixed. - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - - Lookup a composite property in this event - - the key for the property to lookup - the value for the property - - - This event has composite properties that combine together properties from - several different contexts in the following order: - - - this events properties - - This event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - - - Get all the composite properties in this event - - the containing all the properties - - - See for details of the composite properties - stored by the event. - - - This method returns a single containing all the - properties defined for this event. - - - - - - The internal logging event data. - - - - - The internal logging event data. - - - - - The internal logging event data. - - - - - The fully qualified Type of the calling - logger class in the stack frame (i.e. the declaring type of the method). - - - - - The application supplied message of logging event. - - - - - The exception that was thrown. - - - This is not serialized. The string representation - is serialized instead. - - - - - The repository that generated the logging event - - - This is not serialized. - - - - - The fix state for this event - - - These flags indicate which fields have been fixed. - Not serialized. - - - - - Indicated that the internal cache is updateable (ie not fixed) - - - This is a seperate flag to m_fixFlags as it allows incrementel fixing and simpler - changes in the caching strategy. - - - - - Gets the time when the current process started. - - - This is the time when this process started. - - - - The TimeStamp is stored in the local time zone for this computer. - - - Tries to get the start time for the current process. - Failing that it returns the time of the first call to - this property. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating and therefore - without the process start time being reset. - - - - - - Gets the of the logging event. - - - The of the logging event. - - - - Gets the of the logging event. - - - - - - Gets the time of the logging event. - - - The time of the logging event. - - - - The TimeStamp is stored in the local time zone for this computer. - - - - - - Gets the name of the logger that logged the event. - - - The name of the logger that logged the event. - - - - Gets the name of the logger that logged the event. - - - - - - Gets the location information for this logging event. - - - The location information for this logging event. - - - - The collected information is cached for future use. - - - See the class for more information on - supported frameworks and the different behavior in Debug and - Release builds. - - - - - - Gets the message object used to initialize this event. - - - The message object used to initialize this event. - - - - Gets the message object used to initialize this event. - Note that this event may not have a valid message object. - If the event is serialized the message object will not - be transferred. To get the text of the message the - property must be used - not this property. - - - If there is no defined message object for this event then - null will be returned. - - - - - - Gets the exception object used to initialize this event. - - - The exception object used to initialize this event. - - - - Gets the exception object used to initialize this event. - Note that this event may not have a valid exception object. - If the event is serialized the exception object will not - be transferred. To get the text of the exception the - method must be used - not this property. - - - If there is no defined exception object for this event then - null will be returned. - - - - - - The that this event was created in. - - - - The that this event was created in. - - - - - - Gets the message, rendered through the . - - - The message rendered through the . - - - - The collected information is cached for future use. - - - - - - Gets the name of the current thread. - - - The name of the current thread, or the thread ID when - the name is not available. - - - - The collected information is cached for future use. - - - - - - Gets the name of the current user. - - - The name of the current user, or NOT AVAILABLE when the - underlying runtime has no support for retrieving the name of the - current user. - - - - Calls WindowsIdentity.GetCurrent().Name to get the name of - the current windows user. - - - To improve performance, we could cache the string representation of - the name, and reuse that as long as the identity stayed constant. - Once the identity changed, we would need to re-assign and re-render - the string. - - - However, the WindowsIdentity.GetCurrent() call seems to - return different objects every time, so the current implementation - doesn't do this type of caching. - - - Timing for these operations: - - - - Method - Results - - - WindowsIdentity.GetCurrent() - 10000 loops, 00:00:00.2031250 seconds - - - WindowsIdentity.GetCurrent().Name - 10000 loops, 00:00:08.0468750 seconds - - - - This means we could speed things up almost 40 times by caching the - value of the WindowsIdentity.GetCurrent().Name property, since - this takes (8.04-0.20) = 7.84375 seconds. - - - - - - Gets the identity of the current thread principal. - - - The string name of the identity of the current thread principal. - - - - Calls System.Threading.Thread.CurrentPrincipal.Identity.Name to get - the name of the current thread principal. - - - - - - Gets the AppDomain friendly name. - - - The AppDomain friendly name. - - - - Gets the AppDomain friendly name. - - - - - - Additional event specific properties. - - - Additional event specific properties. - - - - A logger or an appender may attach additional - properties to specific events. These properties - have a string key and an object value. - - - This property is for events that have been added directly to - this event. The aggregate properties (which include these - event properties) can be retrieved using - and . - - - Once the properties have been fixed this property - returns the combined cached properties. This ensures that updates to - this property are always reflected in the underlying storage. When - returning the combined properties there may be more keys in the - Dictionary than expected. - - - - - - The fixed fields in this event - - - The set of fields that are fixed in this event - - - - Fields will not be fixed if they have previously been fixed. - It is not possible to 'unfix' a field. - - - - - - Implementation of wrapper interface. - - - - This implementation of the interface - forwards to the held by the base class. - - - This logger has methods to allow the caller to log at the following - levels: - - - - DEBUG - - The and methods log messages - at the DEBUG level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - INFO - - The and methods log messages - at the INFO level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - WARN - - The and methods log messages - at the WARN level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - ERROR - - The and methods log messages - at the ERROR level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - FATAL - - The and methods log messages - at the FATAL level. That is the level with that name defined in the - repositories . The default value - for this level is . The - property tests if this level is enabled for logging. - - - - - The values for these levels and their semantic meanings can be changed by - configuring the for the repository. - - - Nicko Cadell - Gert Driesen - - - - The ILog interface is use by application to log messages into - the log4net framework. - - - - Use the to obtain logger instances - that implement this interface. The - static method is used to get logger instances. - - - This class contains methods for logging at different levels and also - has properties for determining if those logging levels are - enabled in the current configuration. - - - This interface can be implemented in different ways. This documentation - specifies reasonable behavior that a caller can expect from the actual - implementation, however different implementations reserve the right to - do things differently. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - - log.Info("Application Start"); - log.Debug("This is a debug message"); - - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - - Nicko Cadell - Gert Driesen - - - Log a message object with the level. - - Log a message object with the level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Logs a message object with the level. - - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Logs a message object with the INFO level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Logs a message object with the level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - Log a message object with the level. - - Log a message object with the level. - - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - The message object to log. - - - - - - Log a message object with the level including - the stack trace of the passed - as a parameter. - - The message object to log. - The exception to log, including its stack trace. - - - See the form for more detailed information. - - - - - - - Log a formatted message string with the level. - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Logs a formatted message string with the level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the String.Format method. See - for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - For some ILog interface log, when you write: - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, string construction and concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed (who isn't), then you should write: - - - if (log.IsDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in and once in - the . This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. This is the preferred style of logging. - - Alternatively if your logger is available statically then the is debug - enabled state can be stored in a static variable like this: - - - private static readonly bool isDebugEnabled = log.IsDebugEnabled; - - - Then when you come to log you can write: - - - if (isDebugEnabled) - { - log.Debug("This is entry number: " + i ); - } - - - This way the debug enabled state is only queried once - when the class is loaded. Using a private static readonly - variable is the most efficient because it is a run time constant - and can be heavily optimized by the JIT compiler. - - - Of course if you use a static readonly variable to - hold the enabled state of the logger then you cannot - change the enabled state at runtime to vary the logging - that is produced. You have to decide if you need absolute - speed or runtime flexibility. - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Checks if this logger is enabled for the level. - - - true if this logger is enabled for events, false otherwise. - - - For more information see . - - - - - - - - Construct a new wrapper for the specified logger. - - The logger to wrap. - - - Construct a new wrapper for the specified logger. - - - - - - Virtual method called when the configuration of the repository changes - - the repository holding the levels - - - Virtual method called when the configuration of the repository changes - - - - - - Logs a message object with the DEBUG level. - - The message object to log. - - - This method first checks if this logger is DEBUG - enabled by comparing the level of this logger with the - DEBUG level. If this logger is - DEBUG enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the DEBUG level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the DEBUG level including - the stack trace of the passed - as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the DEBUG level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the INFO level. - - The message object to log. - - - This method first checks if this logger is INFO - enabled by comparing the level of this logger with the - INFO level. If this logger is - INFO enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger - and also higher in the hierarchy depending on the value of - the additivity flag. - - - WARNING Note that passing an - to this method will print the name of the - but no stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the INFO level. - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the INFO level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the INFO level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the WARN level. - - the message object to log - - - This method first checks if this logger is WARN - enabled by comparing the level of this logger with the - WARN level. If this logger is - WARN enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the WARN level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the WARN level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the WARN level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the ERROR level. - - The message object to log. - - - This method first checks if this logger is ERROR - enabled by comparing the level of this logger with the - ERROR level. If this logger is - ERROR enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the ERROR level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the ERROR level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the ERROR level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a message object with the FATAL level. - - The message object to log. - - - This method first checks if this logger is FATAL - enabled by comparing the level of this logger with the - FATAL level. If this logger is - FATAL enabled, then it converts the message object - (passed as parameter) to a string by invoking the appropriate - . It then - proceeds to call all the registered appenders in this logger and - also higher in the hierarchy depending on the value of the - additivity flag. - - - WARNING Note that passing an to this - method will print the name of the but no - stack trace. To print a stack trace use the - form instead. - - - - - - Logs a message object with the FATAL level - - The message object to log. - The exception to log, including its stack trace. - - - Logs a message object with the FATAL level including - the stack trace of the - passed as a parameter. - - - See the form for more detailed information. - - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - A String containing zero or more format items - An Object to format - An Object to format - An Object to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - The string is formatted using the - format provider. To specify a localized provider use the - method. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Logs a formatted message string with the FATAL level. - - An that supplies culture-specific formatting information - A String containing zero or more format items - An Object array containing zero or more objects to format - - - The message is formatted using the method. See - String.Format for details of the syntax of the format string and the behavior - of the formatting. - - - This method does not take an object to include in the - log event. To pass an use one of the - methods instead. - - - - - - Event handler for the event - - the repository - Empty - - - - The fully qualified name of this declaring type not the type of any subclass. - - - - - Checks if this logger is enabled for the DEBUG - level. - - - true if this logger is enabled for DEBUG events, - false otherwise. - - - - This function is intended to lessen the computational cost of - disabled log debug statements. - - - For some log Logger object, when you write: - - - log.Debug("This is entry number: " + i ); - - - You incur the cost constructing the message, concatenation in - this case, regardless of whether the message is logged or not. - - - If you are worried about speed, then you should write: - - - if (log.IsDebugEnabled()) - { - log.Debug("This is entry number: " + i ); - } - - - This way you will not incur the cost of parameter - construction if debugging is disabled for log. On - the other hand, if the log is debug enabled, you - will incur the cost of evaluating whether the logger is debug - enabled twice. Once in IsDebugEnabled and once in - the Debug. This is an insignificant overhead - since evaluating a logger takes about 1% of the time it - takes to actually log. - - - - - - Checks if this logger is enabled for the INFO level. - - - true if this logger is enabled for INFO events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - - Checks if this logger is enabled for the WARN level. - - - true if this logger is enabled for WARN events, - false otherwise. - - - - See for more information and examples - of using this method. - - - - - - - Checks if this logger is enabled for the ERROR level. - - - true if this logger is enabled for ERROR events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - - Checks if this logger is enabled for the FATAL level. - - - true if this logger is enabled for FATAL events, - false otherwise. - - - - See for more information and examples of using this method. - - - - - - - A SecurityContext used by log4net when interacting with protected resources - - - - A SecurityContext used by log4net when interacting with protected resources - for example with operating system services. This can be used to impersonate - a principal that has been granted privileges on the system resources. - - - Nicko Cadell - - - - Impersonate this SecurityContext - - State supplied by the caller - An instance that will - revoke the impersonation of this SecurityContext, or null - - - Impersonate this security context. Further calls on the current - thread should now be made in the security context provided - by this object. When the result - method is called the security - context of the thread should be reverted to the state it was in - before was called. - - - - - - The providers default instances. - - - - A configured component that interacts with potentially protected system - resources uses a to provide the elevated - privileges required. If the object has - been not been explicitly provided to the component then the component - will request one from this . - - - By default the is - an instance of which returns only - objects. This is a reasonable default - where the privileges required are not know by the system. - - - This default behavior can be overridden by subclassing the - and overriding the method to return - the desired objects. The default provider - can be replaced by programmatically setting the value of the - property. - - - An alternative is to use the log4net.Config.SecurityContextProviderAttribute - This attribute can be applied to an assembly in the same way as the - log4net.Config.XmlConfiguratorAttribute". The attribute takes - the type to use as the as an argument. - - - Nicko Cadell - - - - The default provider - - - - - Protected default constructor to allow subclassing - - - - Protected default constructor to allow subclassing - - - - - - Create a SecurityContext for a consumer - - The consumer requesting the SecurityContext - An impersonation context - - - The default implementation is to return a . - - - Subclasses should override this method to provide their own - behavior. - - - - - - Gets or sets the default SecurityContextProvider - - - The default SecurityContextProvider - - - - The default provider is used by configured components that - require a and have not had one - given to them. - - - By default this is an instance of - that returns objects. - - - The default provider can be set programmatically by setting - the value of this property to a sub class of - that has the desired behavior. - - - - - - Delegate used to handle creation of new wrappers. - - The logger to wrap in a wrapper. - - - Delegate used to handle creation of new wrappers. This delegate - is called from the - method to construct the wrapper for the specified logger. - - - The delegate to use is supplied to the - constructor. - - - - - - Maps between logger objects and wrapper objects. - - - - This class maintains a mapping between objects and - objects. Use the method to - lookup the for the specified . - - - New wrapper instances are created by the - method. The default behavior is for this method to delegate construction - of the wrapper to the delegate supplied - to the constructor. This allows specialization of the behavior without - requiring subclassing of this type. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the - - The handler to use to create the wrapper objects. - - - Initializes a new instance of the class with - the specified handler to create the wrapper objects. - - - - - - Gets the wrapper object for the specified logger. - - The wrapper object for the specified logger - - - If the logger is null then the corresponding wrapper is null. - - - Looks up the wrapper it it has previously been requested and - returns it. If the wrapper has never been requested before then - the virtual method is - called. - - - - - - Creates the wrapper object for the specified logger. - - The logger to wrap in a wrapper. - The wrapper object for the logger. - - - This implementation uses the - passed to the constructor to create the wrapper. This method - can be overridden in a subclass. - - - - - - Called when a monitored repository shutdown event is received. - - The that is shutting down - - - This method is called when a that this - is holding loggers for has signaled its shutdown - event . The default - behavior of this method is to release the references to the loggers - and their wrappers generated for this repository. - - - - - - Event handler for repository shutdown event. - - The sender of the event. - The event args. - - - - Map of logger repositories to hashtables of ILogger to ILoggerWrapper mappings - - - - - The handler to use to create the extension wrapper objects. - - - - - Internal reference to the delegate used to register for repository shutdown events. - - - - - Gets the map of logger repositories. - - - Map of logger repositories. - - - - Gets the hashtable that is keyed on . The - values are hashtables keyed on with the - value being the corresponding . - - - - - - Formats a as "HH:mm:ss,fff". - - - - Formats a in the format "HH:mm:ss,fff" for example, "15:49:37,459". - - - Nicko Cadell - Gert Driesen - - - - Render a as a string. - - - - Interface to abstract the rendering of a - instance into a string. - - - The method is used to render the - date to a text writer. - - - Nicko Cadell - Gert Driesen - - - - Formats the specified date as a string. - - The date to format. - The writer to write to. - - - Format the as a string and write it - to the provided. - - - - - - String constant used to specify AbsoluteTimeDateFormat in layouts. Current value is ABSOLUTE. - - - - - String constant used to specify DateTimeDateFormat in layouts. Current value is DATE. - - - - - String constant used to specify ISO8601DateFormat in layouts. Current value is ISO8601. - - - - - Renders the date into a string. Format is "HH:mm:ss". - - The date to render into a string. - The string builder to write to. - - - Subclasses should override this method to render the date - into a string using a precision up to the second. This method - will be called at most once per second and the result will be - reused if it is needed again during the same second. - - - - - - Renders the date into a string. Format is "HH:mm:ss,fff". - - The date to render into a string. - The writer to write to. - - - Uses the method to generate the - time string up to the seconds and then appends the current - milliseconds. The results from are - cached and is called at most once - per second. - - - Sub classes should override - rather than . - - - - - - Last stored time with precision up to the second. - - - - - Last stored time with precision up to the second, formatted - as a string. - - - - - Last stored time with precision up to the second, formatted - as a string. - - - - - Formats a as "dd MMM yyyy HH:mm:ss,fff" - - - - Formats a in the format - "dd MMM yyyy HH:mm:ss,fff" for example, - "06 Nov 1994 15:49:37,459". - - - Nicko Cadell - Gert Driesen - Angelika Schnagl - - - - Default constructor. - - - - Initializes a new instance of the class. - - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats a DateTime in the format "dd MMM yyyy HH:mm:ss" - for example, "06 Nov 1994 15:49:37". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - - The format info for the invariant culture. - - - - - Formats the as "yyyy-MM-dd HH:mm:ss,fff". - - - - Formats the specified as a string: "yyyy-MM-dd HH:mm:ss,fff". - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Formats the date without the milliseconds part - - The date to format. - The string builder to write to. - - - Formats the date specified as a string: "yyyy-MM-dd HH:mm:ss". - - - The base class will append the ",fff" milliseconds section. - This method will only be called at most once per second. - - - - - - Formats the using the method. - - - - Formats the using the method. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The format string. - - - Initializes a new instance of the class - with the specified format string. - - - The format string must be compatible with the options - that can be supplied to . - - - - - - Formats the date using . - - The date to convert to a string. - The writer to write to. - - - Uses the date format string supplied to the constructor to call - the method to format the date. - - - - - - The format string used to format the . - - - - The format string must be compatible with the options - that can be supplied to . - - - - - - This filter drops all . - - - - You can add this filter to the end of a filter chain to - switch from the default "accept all unless instructed otherwise" - filtering behavior to a "deny all unless instructed otherwise" - behavior. - - - Nicko Cadell - Gert Driesen - - - - Subclass this type to implement customized logging event filtering - - - - Users should extend this class to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface to provide customized logging event filtering - - - - Users should implement this interface to implement customized logging - event filtering. Note that and - , the parent class of all standard - appenders, have built-in filtering rules. It is suggested that you - first use and understand the built-in rules before rushing to write - your own custom filters. - - - This abstract class assumes and also imposes that filters be - organized in a linear chain. The - method of each filter is called sequentially, in the order of their - addition to the chain. - - - The method must return one - of the integer constants , - or . - - - If the value is returned, then the log event is dropped - immediately without consulting with the remaining filters. - - - If the value is returned, then the next filter - in the chain is consulted. If there are no more filters in the - chain, then the log event is logged. Thus, in the presence of no - filters, the default behavior is to log all logging events. - - - If the value is returned, then the log - event is logged without consulting the remaining filters. - - - The philosophy of log4net filters is largely inspired from the - Linux ipchains. - - - Nicko Cadell - Gert Driesen - - - - Decide if the logging event should be logged through an appender. - - The LoggingEvent to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - - Points to the next filter in the filter chain. - - - - See for more information. - - - - - - Initialize the filter with the options set - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Typically filter's options become active immediately on set, - however this method must still be called. - - - - - - Decide if the should be logged through an appender. - - The to decide upon - The decision of the filter - - - If the decision is , then the event will be - dropped. If the decision is , then the next - filter, if any, will be invoked. If the decision is then - the event will be logged without consulting with other filters in - the chain. - - - This method is marked abstract and must be implemented - in a subclass. - - - - - - Property to get and set the next filter - - - The next filter in the chain - - - - Filters are typically composed into chains. This property allows the next filter in - the chain to be accessed. - - - - - - Default constructor - - - - - Always returns the integer constant - - the LoggingEvent to filter - Always returns - - - Ignores the event being logged and just returns - . This can be used to change the default filter - chain behavior from to . This filter - should only be used as the last filter in the chain - as any further filters will be ignored! - - - - - - The return result from - - - - The return result from - - - - - - The log event must be dropped immediately without - consulting with the remaining filters, if any, in the chain. - - - - - This filter is neutral with respect to the log event. - The remaining filters, if any, should be consulted for a final decision. - - - - - The log event must be logged immediately without - consulting with the remaining filters, if any, in the chain. - - - - - This is a very simple filter based on matching. - - - - The filter admits two options and - . If there is an exact match between the value - of the option and the of the - , then the method returns in - case the option value is set - to true, if it is false then - is returned. If the does not match then - the result will be . - - - Nicko Cadell - Gert Driesen - - - - flag to indicate if the filter should on a match - - - - - the to match against - - - - - Default constructor - - - - - Tests if the of the logging event matches that of the filter - - the event to filter - see remarks - - - If the of the event matches the level of the - filter then the result of the function depends on the - value of . If it is true then - the function will return , it it is false then it - will return . If the does not match then - the result will be . - - - - - - when matching - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - The that the filter will match - - - - The level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - This is a simple filter based on matching. - - - - The filter admits three options and - that determine the range of priorities that are matched, and - . If there is a match between the range - of priorities and the of the , then the - method returns in case the - option value is set to true, if it is false - then is returned. If there is no match, is returned. - - - Nicko Cadell - Gert Driesen - - - - Flag to indicate the behavior when matching a - - - - - the minimum value to match - - - - - the maximum value to match - - - - - Default constructor - - - - - Check if the event should be logged. - - the logging event to check - see remarks - - - If the of the logging event is outside the range - matched by this filter then - is returned. If the is matched then the value of - is checked. If it is true then - is returned, otherwise - is returned. - - - - - - when matching and - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - Set the minimum matched - - - - The minimum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Sets the maximum matched - - - - The maximum level that this filter will attempt to match against the - level. If a match is found then - the result depends on the value of . - - - - - - Simple filter to match a string in the event's logger name. - - - - The works very similar to the . It admits two - options and . If the - of the starts - with the value of the option, then the - method returns in - case the option value is set to true, - if it is false then is returned. - - - Daniel Cazzulino - - - - Flag to indicate the behavior when we have a match - - - - - The logger name string to substring match against the event - - - - - Default constructor - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the equals the beginning of - the incoming () - then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - when matching - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - The that the filter will match - - - - This filter will attempt to match this value against logger name in - the following way. The match will be done against the beginning of the - logger name (using ). The match is - case sensitive. If a match is found then - the result depends on the value of . - - - - - - Simple filter to match a keyed string in the - - - - Simple filter to match a keyed string in the - - - As the MDC has been replaced with layered properties the - should be used instead. - - - Nicko Cadell - Gert Driesen - - - - Simple filter to match a string an event property - - - - Simple filter to match a string in the value for a - specific event property - - - Nicko Cadell - - - - Simple filter to match a string in the rendered message - - - - Simple filter to match a string in the rendered message - - - Nicko Cadell - Gert Driesen - - - - Flag to indicate the behavior when we have a match - - - - - The string to substring match against the message - - - - - A string regex to match - - - - - A regex object to match (generated from m_stringRegexToMatch) - - - - - Default constructor - - - - - Initialize and precompile the Regex if required - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The rendered message is matched against the . - If the occurs as a substring within - the message then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - when matching or - - - - The property is a flag that determines - the behavior when a matching is found. If the - flag is set to true then the filter will the - logging event, otherwise it will the event. - - - The default is true i.e. to the event. - - - - - - Sets the static string to match - - - - The string that will be substring matched against - the rendered message. If the message contains this - string then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - - Sets the regular expression to match - - - - The regular expression pattern that will be matched against - the rendered message. If the message matches this - pattern then the filter will match. If a match is found then - the result depends on the value of . - - - One of or - must be specified. - - - - - - The key to use to lookup the string from the event properties - - - - - Default constructor - - - - - Check if this filter should allow the event to be logged - - the event being logged - see remarks - - - The event property for the is matched against - the . - If the occurs as a substring within - the property value then a match will have occurred. If no match occurs - this function will return - allowing other filters to check the event. If a match occurs then - the value of is checked. If it is - true then is returned otherwise - is returned. - - - - - - The key to lookup in the event properties and then match against. - - - - The key name to use to lookup in the properties map of the - . The match will be performed against - the value of this property if it exists. - - - - - - Simple filter to match a string in the - - - - Simple filter to match a string in the - - - As the MDC has been replaced with named stacks stored in the - properties collections the should - be used instead. - - - Nicko Cadell - Gert Driesen - - - - Default constructor - - - - Sets the to "NDC". - - - - - - Write the event appdomain name to the output - - - - Writes the to the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - Nicko Cadell - - - - Abstract class that provides the formatting functionality that - derived classes need. - - - - Conversion specifiers in a conversion patterns are parsed to - individual PatternConverters. Each of which is responsible for - converting a logging event in a converter specific manner. - - - Nicko Cadell - Gert Driesen - - - - Initial buffer size - - - - - Maximum buffer size before it is recycled - - - - - Protected constructor - - - - Initializes a new instance of the class. - - - - - - Evaluate this pattern converter and write the output to a writer. - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the appropriate way. - - - - - - Set the next pattern converter in the chains - - the pattern converter that should follow this converter in the chain - the next converter - - - The PatternConverter can merge with its neighbor during this method (or a sub class). - Therefore the return value may or may not be the value of the argument passed in. - - - - - - Write the pattern converter to the writer with appropriate formatting - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - This method calls to allow the subclass to perform - appropriate conversion of the pattern converter. If formatting options have - been specified via the then this method will - apply those formattings before writing the output. - - - - - - Fast space padding method. - - to which the spaces will be appended. - The number of spaces to be padded. - - - Fast space padding method. - - - - - - The option string to the converter - - - - - Write an dictionary to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the to a writer in the form: - - - {key1=value1, key2=value2, key3=value3} - - - If the specified - is not null then it is used to render the key and value to text, otherwise - the object's ToString method is called. - - - - - - Write an object to a - - the writer to write to - a to use for object conversion - the value to write to the writer - - - Writes the Object to a writer. If the specified - is not null then it is used to render the object to text, otherwise - the object's ToString method is called. - - - - - - Get the next pattern converter in the chain - - - the next pattern converter in the chain - - - - Get the next pattern converter in the chain - - - - - - Gets or sets the formatting info for this converter - - - The formatting info for this converter - - - - Gets or sets the formatting info for this converter - - - - - - Gets or sets the option value for this converter - - - The option for this converter - - - - Gets or sets the option value for this converter - - - - - - Initializes a new instance of the class. - - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The on which the pattern converter should be executed. - - - - Derived pattern converters must override this method in order to - convert conversion specifiers in the correct way. - - that will receive the formatted result. - The state object on which the pattern converter should be executed. - - - - Flag indicating if this converter handles exceptions - - - false if this converter handles exceptions - - - - - Flag indicating if this converter handles the logging event exception - - false if this converter handles the logging event exception - - - If this converter handles the exception object contained within - , then this property should be set to - false. Otherwise, if the layout ignores the exception - object, then the property should be set to true. - - - Set this value to override a this default setting. The default - value is true, this converter does not handle the exception. - - - - - - Write the event appdomain name to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output . - - - - - - Date pattern converter, uses a to format - the date of a . - - - - Render the to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,yyyy" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the - method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - - The is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - - Initialize the converter pattern based on the property. - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Convert the pattern into the rendered message - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone. - - - - - - Write the exception text to the output - - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - Nicko Cadell - - - - Default constructor - - - - - Write the exception text to the output - - that will receive the formatted result. - the event being logged - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - - - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - - Writes the caller location file name to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - - Write the caller location file name to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - - Write the caller location info to the output - - - - Writes the to the output writer. - - - Nicko Cadell - - - - Write the caller location info to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the output writer. - - - - - - Writes the event identity to the output - - - - Writes the value of the to - the output writer. - - - Daniel Cazzulino - Nicko Cadell - - - - Writes the event identity to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the - to - the output . - - - - - - Write the event level to the output - - - - Writes the display name of the event - to the writer. - - - Nicko Cadell - - - - Write the event level to the output - - that will receive the formatted result. - the event being logged - - - Writes the of the - to the . - - - - - - Write the caller location line number to the output - - - - Writes the value of the for - the event to the output writer. - - - Nicko Cadell - - - - Write the caller location line number to the output - - that will receive the formatted result. - the event being logged - - - Writes the value of the for - the to the output . - - - - - - Converter for logger name - - - - Outputs the of the event. - - - Nicko Cadell - - - - Converter to output and truncate '.' separated strings - - - - This abstract class supports truncating a '.' separated string - to show a specified number of elements from the right hand side. - This is used to truncate class names that are fully qualified. - - - Subclasses should override the method to - return the fully qualified string. - - - Nicko Cadell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Get the fully qualified string data - - the event being logged - the fully qualified name - - - Overridden by subclasses to get the fully qualified name before the - precision is applied to it. - - - Return the fully qualified '.' (dot/period) separated string. - - - - - - Convert the pattern to the rendered message - - that will receive the formatted result. - the event being logged - - Render the to the precision - specified by the property. - - - - - Gets the fully qualified name of the logger - - the event being logged - The fully qualified logger name - - - Returns the of the . - - - - - - Writes the event message to the output - - - - Uses the method - to write out the event message. - - - Nicko Cadell - - - - Writes the event message to the output - - that will receive the formatted result. - the event being logged - - - Uses the method - to write out the event message. - - - - - - Write the method name to the output - - - - Writes the caller location to - the output. - - - Nicko Cadell - - - - Write the method name to the output - - that will receive the formatted result. - the event being logged - - - Writes the caller location to - the output. - - - - - - Converter to include event NDC - - - - Outputs the value of the event property named NDC. - - - The should be used instead. - - - Nicko Cadell - - - - Write the event NDC to the output - - that will receive the formatted result. - the event being logged - - - As the thread context stacks are now stored in named event properties - this converter simply looks up the value of the NDC property. - - - The should be used instead. - - - - - - Property pattern converter - - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - Nicko Cadell - - - - Write the property value to the output - - that will receive the formatted result. - the event being logged - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - - Converter to output the relative time of the event - - - - Converter to output the time of the event relative to the start of the program. - - - Nicko Cadell - - - - Write the relative time to the output - - that will receive the formatted result. - the event being logged - - - Writes out the relative time of the event in milliseconds. - That is the number of milliseconds between the event - and the . - - - - - - Helper method to get the time difference between two DateTime objects - - start time (in the current local time zone) - end time (in the current local time zone) - the time difference in milliseconds - - - - Converter to include event thread name - - - - Writes the to the output. - - - Nicko Cadell - - - - Write the ThreadName to the output - - that will receive the formatted result. - the event being logged - - - Writes the to the . - - - - - - Pattern converter for the class name - - - - Outputs the of the event. - - - Nicko Cadell - - - - Gets the fully qualified name of the class - - the event being logged - The fully qualified type name for the caller location - - - Returns the of the . - - - - - - Converter to include event user name - - Douglas de la Torre - Nicko Cadell - - - - Convert the pattern to the rendered message - - that will receive the formatted result. - the event being logged - - - - Write the TimeStamp to the output - - - - Date pattern converter, uses a to format - the date of a . - - - Uses a to format the - in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - - Write the TimeStamp to the output - - that will receive the formatted result. - the event being logged - - - Pass the to the - for it to render it to the writer. - - - The passed is in the local time zone, this is converted - to Universal time before it is rendered. - - - - - - - A Layout that renders only the Exception text from the logging event - - - - A Layout that renders only the Exception text from the logging event. - - - This Layout should only be used with appenders that utilize multiple - layouts (e.g. ). - - - Nicko Cadell - Gert Driesen - - - - Extend this abstract class to create your own log layout format. - - - - This is the base implementation of the - interface. Most layout objects should extend this class. - - - - - - Subclasses must implement the - method. - - - Subclasses should set the in their default - constructor. - - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by layout objects - - - - An object is used to format a - as text. The method is called by an - appender to transform the into a string. - - - The layout can also supply and - text that is appender before any events and after all the events respectively. - - - Nicko Cadell - Gert Driesen - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text and output to a writer. - - - If the caller does not have a and prefers the - event to be formatted as a then the following - code can be used to format the event into a . - - - StringWriter writer = new StringWriter(); - Layout.Format(writer, loggingEvent); - string formattedEvent = writer.ToString(); - - - - - - The content type output by this layout. - - The content type - - - The content type output by this layout. - - - This is a MIME type e.g. "text/plain". - - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - - Flag indicating if this layout handle exceptions - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - - - - The header text - - - - See for more information. - - - - - - The footer text - - - - See for more information. - - - - - - Flag indicating if this layout handles exceptions - - - - false if this layout handles exceptions - - - - - - Empty default constructor - - - - Empty default constructor - - - - - - Activate component options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - This method must be implemented by the subclass. - - - - - - Implement this method to create your own layout format. - - The TextWriter to write the formatted event to - The event to format - - - This method is called by an appender to format - the as text. - - - - - - The content type output by this layout. - - The content type is "text/plain" - - - The content type output by this layout. - - - This base class uses the value "text/plain". - To change this value a subclass must override this - property. - - - - - - The header for the layout format. - - the layout header - - - The Header text will be appended before any logging events - are formatted and appended. - - - - - - The footer for the layout format. - - the layout footer - - - The Footer text will be appended after all the logging events - have been formatted and appended. - - - - - - Flag indicating if this layout handles exceptions - - false if this layout handles exceptions - - - If this layout handles the exception object contained within - , then the layout should return - false. Otherwise, if the layout ignores the exception - object, then the layout should return true. - - - Set this value to override a this default setting. The default - value is true, this layout does not handle the exception. - - - - - - Default constructor - - - - Constructs a ExceptionLayout - - - - - - Activate component options - - - - Part of the component activation - framework. - - - This method does nothing as options become effective immediately. - - - - - - Gets the exception text from the logging event - - The TextWriter to write the formatted event to - the event being logged - - - Write the exception string to the . - The exception string is retrieved from . - - - - - - Interface for raw layout objects - - - - Interface used to format a - to an object. - - - This interface should not be confused with the - interface. This interface is used in - only certain specialized situations where a raw object is - required rather than a formatted string. The - is not generally useful than this interface. - - - Nicko Cadell - Gert Driesen - - - - Implement this method to create your own layout format. - - The event to format - returns the formatted event - - - Implement this method to create your own layout format. - - - - - - Adapts any to a - - - - Where an is required this adapter - allows a to be specified. - - - Nicko Cadell - Gert Driesen - - - - The layout to adapt - - - - - Construct a new adapter - - the layout to adapt - - - Create the adapter for the specified . - - - - - - Format the logging event as an object. - - The event to format - returns the formatted event - - - Format the logging event as an object. - - - Uses the object supplied to - the constructor to perform the formatting. - - - - - - A flexible layout configurable with pattern string. - - - - The goal of this class is to a - as a string. The results - depend on the conversion pattern. - - - The conversion pattern is closely related to the conversion - pattern of the printf function in C. A conversion pattern is - composed of literal text and format control expressions called - conversion specifiers. - - - You are free to insert any literal text within the conversion - pattern. - - - Each conversion specifier starts with a percent sign (%) and is - followed by optional format modifiers and a conversion - pattern name. The conversion pattern name specifies the type of - data, e.g. logger, level, date, thread name. The format - modifiers control such things as field width, padding, left and - right justification. The following is a simple example. - - - Let the conversion pattern be "%-5level [%thread]: %message%newline" and assume - that the log4net environment was set to use a PatternLayout. Then the - statements - - - ILog log = LogManager.GetLogger(typeof(TestApp)); - log.Debug("Message 1"); - log.Warn("Message 2"); - - would yield the output - - DEBUG [main]: Message 1 - WARN [main]: Message 2 - - - Note that there is no explicit separator between text and - conversion specifiers. The pattern parser knows when it has reached - the end of a conversion specifier when it reads a conversion - character. In the example above the conversion specifier - %-5level means the level of the logging event should be left - justified to a width of five characters. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - a - Equivalent to appdomain - - - appdomain - - Used to output the friendly name of the AppDomain where the - logging event was generated. - - - - c - Equivalent to logger - - - C - Equivalent to type - - - class - Equivalent to type - - - d - Equivalent to date - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - exception - - - Used to output the exception passed in with the log message. - - - If an exception object is stored in the logging event - it will be rendered into the pattern output with a - trailing newline. - If there is no exception then nothing will be output - and no trailing newline will be appended. - It is typical to put a newline before the exception - and to have the exception as the last data in the pattern. - - - - - F - Equivalent to file - - - file - - - Used to output the file name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - WARNING Generating caller information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - l - Equivalent to location - - - L - Equivalent to line - - - location - - - Used to output location information of the caller which generated - the logging event. - - - The location information depends on the CLI implementation but - usually consists of the fully qualified name of the calling - method followed by the callers source the file name and line - number between parentheses. - - - The location information can be very useful. However, its - generation is extremely slow. Its use should be avoided - unless execution speed is not an issue. - - - See the note below on the availability of caller location information. - - - - - level - - - Used to output the level of the logging event. - - - - - line - - - Used to output the line number from where the logging request - was issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - logger - - - Used to output the logger of the logging event. The - logger conversion specifier can be optionally followed by - precision specifier, that is a decimal constant in - brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the logger name will be - printed. By default the logger name is printed in full. - - - For example, for the logger name "a.b.c" the pattern - %logger{2} will output "b.c". - - - - - m - Equivalent to message - - - M - Equivalent to method - - - message - - - Used to output the application supplied message associated with - the logging event. - - - - - mdc - - - The MDC (old name for the ThreadContext.Properties) is now part of the - combined event properties. This pattern is supported for compatibility - but is equivalent to property. - - - - - method - - - Used to output the method name where the logging request was - issued. - - - WARNING Generating caller location information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - See the note below on the availability of caller location information. - - - - - n - Equivalent to newline - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - ndc - - - Used to output the NDC (nested diagnostic context) associated - with the thread that generated the logging event. - - - - - p - Equivalent to level - - - P - Equivalent to property - - - properties - Equivalent to property - - - property - - - Used to output the an event specific property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are added to events by loggers or appenders. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the event properties - - The event has that can be set. These - properties are specific to this event only. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - - r - Equivalent to timestamp - - - t - Equivalent to thread - - - timestamp - - - Used to output the number of milliseconds elapsed since the start - of the application until the creation of the logging event. - - - - - thread - - - Used to output the name of the thread that generated the - logging event. Uses the thread number if no name is available. - - - - - type - - - Used to output the fully qualified type name of the caller - issuing the logging request. This conversion specifier - can be optionally followed by precision specifier, that - is a decimal constant in brackets. - - - If a precision specifier is given, then only the corresponding - number of right most components of the class name will be - printed. By default the class name is output in fully qualified form. - - - For example, for the class name "log4net.Layout.PatternLayout", the - pattern %type{1} will output "PatternLayout". - - - WARNING Generating the caller class information is - slow. Thus, its use should be avoided unless execution speed is - not an issue. - - - See the note below on the availability of caller location information. - - - - - u - Equivalent to identity - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - WARNING Generating caller WindowsIdentity information is - extremely slow. Its use should be avoided unless execution speed - is not an issue. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - w - Equivalent to username - - - x - Equivalent to ndc - - - X - Equivalent to mdc - - - % - - - The sequence %% outputs a single percent sign. - - - - - - The single letter patterns are deprecated in favor of the - longer more descriptive pattern names. - - - By default the relevant information is output as is. However, - with the aid of format modifiers it is possible to change the - minimum field width, the maximum field width and justification. - - - The optional format modifier is placed between the percent sign - and the conversion pattern name. - - - The first optional format modifier is the left justification - flag which is just the minus (-) character. Then comes the - optional minimum field width modifier. This is a decimal - constant that represents the minimum number of characters to - output. If the data item requires fewer characters, it is padded on - either the left or the right until the minimum width is - reached. The default is to pad on the left (right justify) but you - can specify right padding with the left justification flag. The - padding character is space. If the data item is larger than the - minimum field width, the field is expanded to accommodate the - data. The value is never truncated. - - - This behavior can be changed using the maximum field - width modifier which is designated by a period followed by a - decimal constant. If the data item is longer than the maximum - field, then the extra characters are removed from the - beginning of the data item and not from the end. For - example, it the maximum field width is eight and the data item is - ten characters long, then the first two characters of the data item - are dropped. This behavior deviates from the printf function in C - where truncation is done from the end. - - - Below are various format modifier examples for the logger - conversion specifier. - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Format modifierleft justifyminimum widthmaximum widthcomment
    %20loggerfalse20none - - Left pad with spaces if the logger name is less than 20 - characters long. - -
    %-20loggertrue20none - - Right pad with spaces if the logger - name is less than 20 characters long. - -
    %.30loggerNAnone30 - - Truncate from the beginning if the logger - name is longer than 30 characters. - -
    %20.30loggerfalse2030 - - Left pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
    %-20.30loggertrue2030 - - Right pad with spaces if the logger name is shorter than 20 - characters. However, if logger name is longer than 30 characters, - then truncate from the beginning. - -
    -
    - - Note about caller location information.
    - The following patterns %type %file %line %method %location %class %C %F %L %l %M - all generate caller location information. - Location information uses the System.Diagnostics.StackTrace class to generate - a call stack. The caller's information is then extracted from this stack. -
    - - - The System.Diagnostics.StackTrace class is not supported on the - .NET Compact Framework 1.0 therefore caller location information is not - available on that framework. - - - - - The System.Diagnostics.StackTrace class has this to say about Release builds: - - - "StackTrace information will be most informative with Debug build configurations. - By default, Debug builds include debug symbols, while Release builds do not. The - debug symbols contain most of the file, method name, line number, and column - information used in constructing StackFrame and StackTrace objects. StackTrace - might not report as many method calls as expected, due to code transformations - that occur during optimization." - - - This means that in a Release build the caller information may be incomplete or may - not exist at all! Therefore caller location information cannot be relied upon in a Release build. - - - - Additional pattern converters may be registered with a specific - instance using the method. - -
    - - This is a more detailed pattern. - %timestamp [%thread] %level %logger %ndc - %message%newline - - - A similar pattern except that the relative time is - right padded if less than 6 digits, thread name is right padded if - less than 15 characters and truncated if longer and the logger - name is left padded if shorter than 30 characters and truncated if - longer. - %-6timestamp [%15.15thread] %-5level %30.30logger %ndc - %message%newline - - Nicko Cadell - Gert Driesen - Douglas de la Torre - Daniel Cazzulino -
    - - - Default pattern string for log output. - - - - Default pattern string for log output. - Currently set to the string "%message%newline" - which just prints the application supplied message. - - - - - - A detailed conversion pattern - - - - A conversion pattern which includes Time, Thread, Logger, and Nested Context. - Current value is %timestamp [%thread] %level %logger %ndc - %message%newline. - - - - - - Internal map of converter identifiers to converter types. - - - - This static map is overridden by the m_converterRegistry instance map - - - - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternLayout only - - - - - Initialize the global registry - - - - Defines the builtin global rules. - - - - - - Constructs a PatternLayout using the DefaultConversionPattern - - - - The default pattern just produces the application supplied message. - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - As per the contract the - method must be called after the properties on this object have been - configured. - - - - - - Constructs a PatternLayout using the supplied conversion pattern - - the pattern to use - - - Note to Inheritors: This constructor calls the virtual method - . If you override this method be - aware that it will be called before your is called constructor. - - - When using this constructor the method - need not be called. This may not be the case when using a subclass. - - - - - - Create the pattern parser instance - - the pattern to parse - The that will format the event - - - Creates the used to parse the conversion string. Sets the - global and instance rules on the . - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a formatted string as specified by the conversion pattern. - - the event being logged - The TextWriter to write the formatted event to - - - Parse the using the patter format - specified in the property. - - - - - - Add a converter to this PatternLayout - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - - Add a converter to this PatternLayout - - the name of the conversion pattern for this converter - the type of the converter - - - Add a named pattern converter to this instance. This - converter will be used in the formatting of the event. - This method must be called before . - - - The specified must extend the - type. - - - - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - - Wrapper class used to map converter names to converter types - - - - Pattern converter info class used during configuration to - pass to the - method. - - - - - - default constructor - - - - - Gets or sets the name of the conversion pattern - - - - The name of the pattern in the format string - - - - - - Gets or sets the type of the converter - - - - The value specified must extend the - type. - - - - - - Type converter for the interface - - - - Used to convert objects to the interface. - Supports converting from the interface to - the interface using the . - - - Nicko Cadell - Gert Driesen - - - - Interface supported by type converters - - - - This interface supports conversion from arbitrary types - to a single target type. See . - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Test if the can be converted to the - type supported by this converter. - - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Converts the to the type supported - by this converter. - - - - - - Can the sourceType be converted to an - - the source to be to be converted - true if the source type can be converted to - - - Test if the can be converted to a - . Only is supported - as the . - - - - - - Convert the value to a object - - the value to convert - the object - - - Convert the object to a - object. If the object - is a then the - is used to adapt between the two interfaces, otherwise an - exception is thrown. - - - - - - Extract the value of a property from the - - - - Extract the value of a property from the - - - Nicko Cadell - - - - Constructs a RawPropertyLayout - - - - - Lookup the property for - - The event to format - returns property value - - - Looks up and returns the object value of the property - named . If there is no property defined - with than name then null will be returned. - - - - - - The name of the value to lookup in the LoggingEvent Properties collection. - - - Value to lookup in the LoggingEvent Properties collection - - - - String name of the property to lookup in the . - - - - - - Extract the date from the - - - - Extract the date from the - - - Nicko Cadell - Gert Driesen - - - - Constructs a RawTimeStampLayout - - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in local time. To format the time stamp - in universal time use . - - - - - - Extract the date from the - - - - Extract the date from the - - - Nicko Cadell - Gert Driesen - - - - Constructs a RawUtcTimeStampLayout - - - - - Gets the as a . - - The event to format - returns the time stamp - - - Gets the as a . - - - The time stamp is in universal time. To format the time stamp - in local time use . - - - - - - A very simple layout - - - - SimpleLayout consists of the level of the log statement, - followed by " - " and then the log message itself. For example, - - DEBUG - Hello world - - - - Nicko Cadell - Gert Driesen - - - - Constructs a SimpleLayout - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a simple formatted output. - - the event being logged - The TextWriter to write the formatted event to - - - Formats the event as the level of the even, - followed by " - " and then the log message itself. The - output is terminated by a newline. - - - - - - Layout that formats the log events as XML elements. - - - - The output of the consists of a series of - log4net:event elements. It does not output a complete well-formed XML - file. The output is designed to be included as an external entity - in a separate file to form a correct XML file. - - - For example, if abc is the name of the file where - the output goes, then a well-formed XML file would - be: - - - <?xml version="1.0" ?> - - <!DOCTYPE log4net:events SYSTEM "log4net-events.dtd" [<!ENTITY data SYSTEM "abc">]> - - <log4net:events version="1.2" xmlns:log4net="http://logging.apache.org/log4net/schemas/log4net-events-1.2> - &data; - </log4net:events> - - - This approach enforces the independence of the - and the appender where it is embedded. - - - The version attribute helps components to correctly - interpret output generated by . The value of - this attribute should be "1.2" for release 1.2 and later. - - - Alternatively the Header and Footer properties can be - configured to output the correct XML header, open tag and close tag. - When setting the Header and Footer properties it is essential - that the underlying data store not be appendable otherwise the data - will become invalid XML. - - - Nicko Cadell - Gert Driesen - - - - Layout that formats the log events as XML elements. - - - - This is an abstract class that must be subclassed by an implementation - to conform to a specific schema. - - - Deriving classes must implement the method. - - - Nicko Cadell - Gert Driesen - - - - Protected constructor to support subclasses - - - - Initializes a new instance of the class - with no location info. - - - - - - Protected constructor to support subclasses - - - - The parameter determines whether - location information will be output by the layout. If - is set to true, then the - file name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Produces a formatted string. - - The event being logged. - The TextWriter to write the formatted event to - - - Format the and write it to the . - - - This method creates an that writes to the - . The is passed - to the method. Subclasses should override the - method rather than this method. - - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Subclasses should override this method to format - the as XML. - - - - - - Flag to indicate if location information should be included in - the XML events. - - - - - Writer adapter that ignores Close - - - - - The string to replace invalid chars with - - - - - Gets a value indicating whether to include location information in - the XML events. - - - true if location information should be included in the XML - events; otherwise, false. - - - - If is set to true, then the file - name and line number of the statement at the origin of the log - statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - The string to replace characters that can not be expressed in XML with. - - - Not all characters may be expressed in XML. This property contains the - string to replace those that can not with. This defaults to a ?. Set it - to the empty string to simply remove offending characters. For more - details on the allowed character ranges see http://www.w3.org/TR/REC-xml/#charsets - Character replacement will occur in the log message, the property names - and the property values. - - - - - - - Gets the content type output by this layout. - - - As this is the XML layout, the value is always "text/xml". - - - - As this is the XML layout, the value is always "text/xml". - - - - - - Constructs an XmlLayout - - - - - Constructs an XmlLayout. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SmtpAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Initialize layout options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - Builds a cache of the element names - - - - - - Does the actual writing of the XML. - - The writer to use to output the event to. - The event to write. - - - Override the base class method - to write the to the . - - - - - - The prefix to use for all generated element names - - - - - The prefix to use for all element names - - - - The default prefix is log4net. Set this property - to change the prefix. If the prefix is set to an empty string - then no prefix will be written. - - - - - - Set whether or not to base64 encode the message. - - - - By default the log message will be written as text to the xml - output. This can cause problems when the message contains binary - data. By setting this to true the contents of the message will be - base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the log message. - - - - - - Set whether or not to base64 encode the property values. - - - - By default the properties will be written as text to the xml - output. This can cause problems when one or more properties contain - binary data. By setting this to true the values of the properties - will be base64 encoded. If this is set then invalid character replacement - (see ) will not be performed - on the property values. - - - - - - Layout that formats the log events as XML elements compatible with the log4j schema - - - - Formats the log events according to the http://logging.apache.org/log4j schema. - - - Nicko Cadell - - - - The 1st of January 1970 in UTC - - - - - Constructs an XMLLayoutSchemaLog4j - - - - - Constructs an XMLLayoutSchemaLog4j. - - - - The LocationInfo option takes a boolean value. By - default, it is set to false which means there will be no location - information output by this layout. If the the option is set to - true, then the file name and line number of the statement - at the origin of the log statement will be output. - - - If you are embedding this layout within an SMTPAppender - then make sure to set the LocationInfo option of that - appender as well. - - - - - - Actually do the writing of the xml - - the writer to use - the event to write - - - Generate XML that is compatible with the log4j schema. - - - - - - The version of the log4j schema to use. - - - - Only version 1.2 of the log4j schema is supported. - - - - - - The default object Renderer. - - - - The default renderer supports rendering objects and collections to strings. - - - See the method for details of the output. - - - Nicko Cadell - Gert Driesen - - - - Implement this interface in order to render objects as strings - - - - Certain types require special case conversion to - string form. This conversion is done by an object renderer. - Object renderers implement the - interface. - - - Nicko Cadell - Gert Driesen - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a - string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - - - - Default constructor - - - - Default constructor - - - - - - Render the object to a string - - The map used to lookup renderers - The object to render - The writer to render to - - - Render the object to a string. - - - The parameter is - provided to lookup and render other objects. This is - very useful where contains - nested objects of unknown type. The - method can be used to render these objects. - - - The default renderer supports rendering objects to strings as follows: - - - - Value - Rendered String - - - null - - "(null)" - - - - - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - , & - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. - - - For example: {a, b, c}. - - - All collection classes that implement its subclasses, - or generic equivalents all implement the interface. - - - - - - - - Rendered as the key, an equals sign ('='), and the value (using the appropriate - renderer). - - - For example: key=value. - - - - - other - - Object.ToString() - - - - - - - - Render the array argument into a string - - The map used to lookup renderers - the array to render - The writer to render to - - - For a one dimensional array this is the - array type name, an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - int[] {1, 2, 3}. - - - If the array is not one dimensional the - Array.ToString() is returned. - - - - - - Render the enumerator argument into a string - - The map used to lookup renderers - the enumerator to render - The writer to render to - - - Rendered as an open brace, followed by a comma - separated list of the elements (using the appropriate - renderer), followed by a close brace. For example: - {a, b, c}. - - - - - - Render the DictionaryEntry argument into a string - - The map used to lookup renderers - the DictionaryEntry to render - The writer to render to - - - Render the key, an equals sign ('='), and the value (using the appropriate - renderer). For example: key=value. - - - - - - Map class objects to an . - - - - Maintains a mapping between types that require special - rendering and the that - is used to render them. - - - The method is used to render an - object using the appropriate renderers defined in this map. - - - Nicko Cadell - Gert Driesen - - - - Default Constructor - - - - Default constructor. - - - - - - Render using the appropriate renderer. - - the object to render to a string - the object rendered as a string - - - This is a convenience method used to render an object to a string. - The alternative method - should be used when streaming output to a . - - - - - - Render using the appropriate renderer. - - the object to render to a string - The writer to render to - - - Find the appropriate renderer for the type of the - parameter. This is accomplished by calling the - method. Once a renderer is found, it is - applied on the object and the result is returned - as a . - - - - - - Gets the renderer for the specified object type - - the object to lookup the renderer for - the renderer for - - - Gets the renderer for the specified object type. - - - Syntactic sugar method that calls - with the type of the object parameter. - - - - - - Gets the renderer for the specified type - - the type to lookup the renderer for - the renderer for the specified type - - - Returns the renderer for the specified type. - If no specific renderer has been defined the - will be returned. - - - - - - Internal function to recursively search interfaces - - the type to lookup the renderer for - the renderer for the specified type - - - - Clear the map of renderers - - - - Clear the custom renderers defined by using - . The - cannot be removed. - - - - - - Register an for . - - the type that will be rendered by - the renderer for - - - Register an object renderer for a specific source type. - This renderer will be returned from a call to - specifying the same as an argument. - - - - - - Get the default renderer instance - - the default renderer - - - Get the default renderer - - - - - - Interface implemented by logger repository plugins. - - - - Plugins define additional behavior that can be associated - with a . - The held by the - property is used to store the plugins for a repository. - - - The log4net.Config.PluginAttribute can be used to - attach plugins to repositories created using configuration - attributes. - - - Nicko Cadell - Gert Driesen - - - - Attaches the plugin to the specified . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - - Gets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - - - - Interface used to create plugins. - - - - Interface used to create a plugin. - - - Nicko Cadell - Gert Driesen - - - - Creates the plugin object. - - the new plugin instance - - - Create and return a new plugin instance. - - - - - - A strongly-typed collection of objects. - - Nicko Cadell - - - - Creates a read-only wrapper for a PluginCollection instance. - - list to create a readonly wrapper arround - - A PluginCollection wrapper that is read-only. - - - - - Initializes a new instance of the PluginCollection class - that is empty and has the default initial capacity. - - - - - Initializes a new instance of the PluginCollection class - that has the specified initial capacity. - - - The number of elements that the new PluginCollection is initially capable of storing. - - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified PluginCollection. - - The PluginCollection whose elements are copied to the new collection. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified array. - - The array whose elements are copied to the new list. - - - - Initializes a new instance of the PluginCollection class - that contains elements copied from the specified collection. - - The collection whose elements are copied to the new list. - - - - Allow subclasses to avoid our default constructors - - - - - - - Copies the entire PluginCollection to a one-dimensional - array. - - The one-dimensional array to copy to. - - - - Copies the entire PluginCollection to a one-dimensional - array, starting at the specified index of the target array. - - The one-dimensional array to copy to. - The zero-based index in at which copying begins. - - - - Adds a to the end of the PluginCollection. - - The to be added to the end of the PluginCollection. - The index at which the value has been added. - - - - Removes all elements from the PluginCollection. - - - - - Creates a shallow copy of the . - - A new with a shallow copy of the collection data. - - - - Determines whether a given is in the PluginCollection. - - The to check for. - true if is found in the PluginCollection; otherwise, false. - - - - Returns the zero-based index of the first occurrence of a - in the PluginCollection. - - The to locate in the PluginCollection. - - The zero-based index of the first occurrence of - in the entire PluginCollection, if found; otherwise, -1. - - - - - Inserts an element into the PluginCollection at the specified index. - - The zero-based index at which should be inserted. - The to insert. - - is less than zero - -or- - is equal to or greater than . - - - - - Removes the first occurrence of a specific from the PluginCollection. - - The to remove from the PluginCollection. - - The specified was not found in the PluginCollection. - - - - - Removes the element at the specified index of the PluginCollection. - - The zero-based index of the element to remove. - - is less than zero. - -or- - is equal to or greater than . - - - - - Returns an enumerator that can iterate through the PluginCollection. - - An for the entire PluginCollection. - - - - Adds the elements of another PluginCollection to the current PluginCollection. - - The PluginCollection whose elements should be added to the end of the current PluginCollection. - The new of the PluginCollection. - - - - Adds the elements of a array to the current PluginCollection. - - The array whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - - Adds the elements of a collection to the current PluginCollection. - - The collection whose elements should be added to the end of the PluginCollection. - The new of the PluginCollection. - - - - Sets the capacity to the actual number of elements. - - - - - is less than zero. - -or- - is equal to or greater than . - - - - - is less than zero. - -or- - is equal to or greater than . - - - - - Gets the number of elements actually contained in the PluginCollection. - - - - - Gets a value indicating whether access to the collection is synchronized (thread-safe). - - true if access to the ICollection is synchronized (thread-safe); otherwise, false. - - - - Gets an object that can be used to synchronize access to the collection. - - - An object that can be used to synchronize access to the collection. - - - - - Gets or sets the at the specified index. - - - The at the specified index. - - The zero-based index of the element to get or set. - - is less than zero. - -or- - is equal to or greater than . - - - - - Gets a value indicating whether the collection has a fixed size. - - true if the collection has a fixed size; otherwise, false. The default is false. - - - - Gets a value indicating whether the IList is read-only. - - true if the collection is read-only; otherwise, false. The default is false. - - - - Gets or sets the number of elements the PluginCollection can contain. - - - The number of elements the PluginCollection can contain. - - - - - Supports type-safe iteration over a . - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - - - Type visible only to our subclasses - Used to access protected constructor - - - - - - A value - - - - - Supports simple iteration over a . - - - - - - Initializes a new instance of the Enumerator class. - - - - - - Advances the enumerator to the next element in the collection. - - - true if the enumerator was successfully advanced to the next element; - false if the enumerator has passed the end of the collection. - - - The collection was modified after the enumerator was created. - - - - - Sets the enumerator to its initial position, before the first element in the collection. - - - - - Gets the current element in the collection. - - - The current element in the collection. - - - - - - - - Map of repository plugins. - - - - This class is a name keyed map of the plugins that are - attached to a repository. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The repository that the plugins should be attached to. - - - Initialize a new instance of the class with a - repository that the plugins should be attached to. - - - - - - Adds a to the map. - - The to add to the map. - - - The will be attached to the repository when added. - - - If there already exists a plugin with the same name - attached to the repository then the old plugin will - be and replaced with - the new plugin. - - - - - - Removes a from the map. - - The to remove from the map. - - - Remove a specific plugin from this map. - - - - - - Gets a by name. - - The name of the to lookup. - - The from the map with the name specified, or - null if no plugin is found. - - - - Lookup a plugin by name. If the plugin is not found null - will be returned. - - - - - - Gets all possible plugins as a list of objects. - - All possible plugins as a list of objects. - - - Get a collection of all the plugins defined in this map. - - - - - - Base implementation of - - - - Default abstract implementation of the - interface. This base class can be used by implementors - of the interface. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - the name of the plugin - - Initializes a new Plugin with the specified name. - - - - - Attaches this plugin to a . - - The that this plugin should be attached to. - - - A plugin may only be attached to a single repository. - - - This method is called when the plugin is attached to the repository. - - - - - - Is called when the plugin is to shutdown. - - - - This method is called to notify the plugin that - it should stop operating and should detach from - the repository. - - - - - - The name of this plugin. - - - - - The repository this plugin is attached to. - - - - - Gets or sets the name of the plugin. - - - The name of the plugin. - - - - Plugins are stored in the - keyed by name. Each plugin instance attached to a - repository must be a unique name. - - - The name of the plugin must not change one the - plugin has been attached to a repository. - - - - - - The repository for this plugin - - - The that this plugin is attached to. - - - - Gets or sets the that this plugin is - attached to. - - - - - - Default implementation of - - - - This default implementation of the - interface is used to create the default subclass - of the object. - - - Nicko Cadell - Gert Driesen - - - - Interface abstracts creation of instances - - - - This interface is used by the to - create new objects. - - - The method is called - to create a named . - - - Implement this interface to create new subclasses of . - - - Nicko Cadell - Gert Driesen - - - - Create a new instance - - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Create a new instance - - The name of the . - The instance for the specified name. - - - Create a new instance with the - specified name. - - - Called by the to create - new named instances. - - - If the is null then the root logger - must be returned. - - - - - - Default internal subclass of - - - - This subclass has no additional behavior over the - class but does allow instances - to be created. - - - - - - Implementation of used by - - - - Internal class used to provide implementation of - interface. Applications should use to get - logger instances. - - - This is one of the central classes in the log4net implementation. One of the - distinctive features of log4net are hierarchical loggers and their - evaluation. The organizes the - instances into a rooted tree hierarchy. - - - The class is abstract. Only concrete subclasses of - can be created. The - is used to create instances of this type for the . - - - Nicko Cadell - Gert Driesen - Aspi Havewala - Douglas de la Torre - - - - This constructor created a new instance and - sets its name. - - The name of the . - - - This constructor is protected and designed to be used by - a subclass that is not abstract. - - - Loggers are constructed by - objects. See for the default - logger creator. - - - - - - Add to the list of appenders of this - Logger instance. - - An appender to add to this logger - - - Add to the list of appenders of this - Logger instance. - - - If is already in the list of - appenders, then it won't be added again. - - - - - - Look for the appender named as name - - The name of the appender to lookup - The appender with the name specified, or null. - - - Returns the named appender, or null if the appender is not found. - - - - - - Remove all previously added appenders from this Logger instance. - - - - Remove all previously added appenders from this Logger instance. - - - This is useful when re-reading configuration information. - - - - - - Remove the appender passed as parameter form the list of appenders. - - The appender to remove - The appender removed from the list - - - Remove the appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Remove the appender passed as parameter form the list of appenders. - - The name of the appender to remove - The appender removed from the list - - - Remove the named appender passed as parameter form the list of appenders. - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - This generic form is intended to be used by wrappers. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the and . - - - This method must not throw any exception to the caller. - - - - - - This is the most generic printing method that is intended to be used - by wrappers. - - The event being logged. - - - Logs the specified logging event through this logger. - - - This method must not throw any exception to the caller. - - - - - - Checks if this logger is enabled for a given passed as parameter. - - The level to check. - - true if this logger is enabled for level, otherwise false. - - - - Test if this logger is going to log events of the specified . - - - This method must not throw any exception to the caller. - - - - - - Deliver the to the attached appenders. - - The event to log. - - - Call the appenders in the hierarchy starting at - this. If no appenders could be found, emit a - warning. - - - This method calls all the appenders inherited from the - hierarchy circumventing any evaluation of whether to log or not - to log the particular log request. - - - - - - Closes all attached appenders implementing the interface. - - - - Used to ensure that the appenders are correctly shutdown. - - - - - - This is the most generic printing method. This generic form is intended to be used by wrappers - - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generate a logging event for the specified using - the . - - - - - - Creates a new logging event and logs the event without further checks. - - The declaring type of the method that is - the stack boundary into the logging system for this call. - The level of the message to be logged. - The message object to log. - The exception to log, including its stack trace. - - - Generates a logging event and delivers it to the attached - appenders. - - - - - - Creates a new logging event and logs the event without further checks. - - The event being logged. - - - Delivers the logging event to the attached appenders. - - - - - - The fully qualified type of the Logger class. - - - - - The name of this logger. - - - - - The assigned level of this logger. - - - - The level variable need not be - assigned a value in which case it is inherited - form the hierarchy. - - - - - - The parent of this logger. - - - - The parent of this logger. - All loggers have at least one ancestor which is the root logger. - - - - - - Loggers need to know what Hierarchy they are in. - - - - Loggers need to know what Hierarchy they are in. - The hierarchy that this logger is a member of is stored - here. - - - - - - Helper implementation of the interface - - - - - Flag indicating if child loggers inherit their parents appenders - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - - Lock to protect AppenderAttachedImpl variable m_appenderAttachedImpl - - - - - Gets or sets the parent logger in the hierarchy. - - - The parent logger in the hierarchy. - - - - Part of the Composite pattern that makes the hierarchy. - The hierarchy is parent linked rather than child linked. - - - - - - Gets or sets a value indicating if child loggers inherit their parent's appenders. - - - true if child loggers inherit their parent's appenders. - - - - Additivity is set to true by default, that is children inherit - the appenders of their ancestors by default. If this variable is - set to false then the appenders found in the - ancestors of this logger are not used. However, the children - of this logger will inherit its appenders, unless the children - have their additivity flag set to false too. See - the user manual for more details. - - - - - - Gets the effective level for this logger. - - The nearest level in the logger hierarchy. - - - Starting from this logger, searches the logger hierarchy for a - non-null level and returns it. Otherwise, returns the level of the - root logger. - - The Logger class is designed so that this method executes as - quickly as possible. - - - - - Gets or sets the where this - Logger instance is attached to. - - The hierarchy that this logger belongs to. - - - This logger must be attached to a single . - - - - - - Gets or sets the assigned , if any, for this Logger. - - - The of this logger. - - - - The assigned can be null. - - - - - - Get the appenders contained in this logger as an - . - - A collection of the appenders in this logger - - - Get the appenders contained in this logger as an - . If no appenders - can be found, then a is returned. - - - - - - Gets the logger name. - - - The name of the logger. - - - - The name of this logger - - - - - - Gets the where this - Logger instance is attached to. - - - The that this logger belongs to. - - - - Gets the where this - Logger instance is attached to. - - - - - - Construct a new Logger - - the name of the logger - - - Initializes a new instance of the class - with the specified name. - - - - - - Delegate used to handle logger creation event notifications. - - The in which the has been created. - The event args that hold the instance that has been created. - - - Delegate used to handle logger creation event notifications. - - - - - - Provides data for the event. - - - - A event is raised every time a - is created. - - - - - - The created - - - - - Constructor - - The that has been created. - - - Initializes a new instance of the event argument - class,with the specified . - - - - - - Gets the that has been created. - - - The that has been created. - - - - The that has been created. - - - - - - Hierarchical organization of loggers - - - - The casual user should not have to deal with this class - directly. - - - This class is specialized in retrieving loggers by name and - also maintaining the logger hierarchy. Implements the - interface. - - - The structure of the logger hierarchy is maintained by the - method. The hierarchy is such that children - link to their parent but parents do not have any references to their - children. Moreover, loggers can be instantiated in any order, in - particular descendant before ancestor. - - - In case a descendant is created before a particular ancestor, - then it creates a provision node for the ancestor and adds itself - to the provision node. Other descendants of the same ancestor add - themselves to the previously created provision node. - - - Nicko Cadell - Gert Driesen - - - - Base implementation of - - - - Default abstract implementation of the interface. - - - Skeleton implementation of the interface. - All types can extend this type. - - - Nicko Cadell - Gert Driesen - - - - Interface implemented by logger repositories. - - - - This interface is implemented by logger repositories. e.g. - . - - - This interface is used by the - to obtain interfaces. - - - Nicko Cadell - Gert Driesen - - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - The name of the logger to lookup - The Logger object with the name specified - - - If the names logger exists it is returned, otherwise - null is returned. - - - - - - Returns all the currently defined loggers as an Array. - - All the defined loggers - - - Returns all the currently defined loggers as an Array. - - - - - - Returns a named logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Returns a named logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - Shutdown the repository - - - Shutting down a repository will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - - The name of the repository - - - The name of the repository - - - - The name of the repository. - - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository. - - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - - Repository specific properties - - - Repository specific properties - - - - These properties can be specified on a repository specific basis. - - - - - - Default Constructor - - - - Initializes the repository with default (empty) properties. - - - - - - Construct the repository using specific properties - - the properties to set for this repository - - - Initializes the repository with specified properties. - - - - - - Test if logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the repository. If so return - its reference, otherwise returns null. - - - - - - Returns all the currently defined loggers in the repository - - All the defined loggers - - - Returns all the currently defined loggers in the repository as an Array. - - - - - - Return a new logger instance - - The name of the logger to retrieve - The logger object with the name specified - - - Return a new logger instance. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - - - - Shutdown the repository - - - - Shutdown the repository. Can be overridden in a subclass. - This base class implementation notifies the - listeners and all attached plugins of the shutdown event. - - - - - - Reset the repositories configuration to a default state - - - - Reset all values contained in this instance to their - default state. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the logEvent through this repository. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are configured as an Array. - - All the Appenders - - - Returns all the Appenders that are configured as an Array. - - - - - - Adds an object renderer for a specific class. - - The type that will be rendered by the renderer supplied. - The object renderer used to render the object. - - - Adds an object renderer for a specific class. - - - - - - Notify the registered listeners that the repository is shutting down - - Empty EventArgs - - - Notify any listeners that this repository is shutting down. - - - - - - Notify the registered listeners that the repository has had its configuration reset - - Empty EventArgs - - - Notify any listeners that this repository's configuration has been reset. - - - - - - Notify the registered listeners that the repository has had its configuration changed - - Empty EventArgs - - - Notify any listeners that this repository's configuration has changed. - - - - - - Raise a configuration changed event on this repository - - EventArgs.Empty - - - Applications that programmatically change the configuration of the repository should - raise this event notification to notify listeners. - - - - - - The name of the repository - - - The string name of the repository - - - - The name of this repository. The name is - used to store and lookup the repositories - stored by the . - - - - - - The threshold for all events in this repository - - - The threshold for all events in this repository - - - - The threshold for all events in this repository - - - - - - RendererMap accesses the object renderer map for this repository. - - - RendererMap accesses the object renderer map for this repository. - - - - RendererMap accesses the object renderer map for this repository. - - - The RendererMap holds a mapping between types and - objects. - - - - - - The plugin map for this repository. - - - The plugin map for this repository. - - - - The plugin map holds the instances - that have been attached to this repository. - - - - - - Get the level map for the Repository. - - - - Get the level map for the Repository. - - - The level map defines the mappings between - level names and objects in - this repository. - - - - - - Flag indicates if this repository has been configured. - - - Flag indicates if this repository has been configured. - - - - Flag indicates if this repository has been configured. - - - - - - Event to notify that the repository has been shutdown. - - - Event to notify that the repository has been shutdown. - - - - Event raised when the repository has been shutdown. - - - - - - Event to notify that the repository has had its configuration reset. - - - Event to notify that the repository has had its configuration reset. - - - - Event raised when the repository's configuration has been - reset to default. - - - - - - Event to notify that the repository has had its configuration changed. - - - Event to notify that the repository has had its configuration changed. - - - - Event raised when the repository's configuration has been changed. - - - - - - Repository specific properties - - - Repository specific properties - - - These properties can be specified on a repository specific basis - - - - - Basic Configurator interface for repositories - - - - Interface used by basic configurator to configure a - with a default . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - - Initialize the repository using the specified appender - - the appender to use to log all logging events - - - Configure the repository to route all logging events to the - specified appender. - - - - - - Configure repository using XML - - - - Interface used by Xml configurator to configure a . - - - A should implement this interface to support - configuration by the . - - - Nicko Cadell - Gert Driesen - - - - Initialize the repository using the specified config - - the element containing the root of the config - - - The schema for the XML configuration data is defined by - the implementation. - - - - - - Default constructor - - - - Initializes a new instance of the class. - - - - - - Construct with properties - - The properties to pass to this repository. - - - Initializes a new instance of the class. - - - - - - Construct with a logger factory - - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - - Construct with properties and a logger factory - - The properties to pass to this repository. - The factory to use to create new logger instances. - - - Initializes a new instance of the class with - the specified . - - - - - - Test if a logger exists - - The name of the logger to lookup - The Logger object with the name specified - - - Check if the named logger exists in the hierarchy. If so return - its reference, otherwise returns null. - - - - - - Returns all the currently defined loggers in the hierarchy as an Array - - All the defined loggers - - - Returns all the currently defined loggers in the hierarchy as an Array. - The root logger is not included in the returned - enumeration. - - - - - - Return a new logger instance named as the first parameter using - the default factory. - - - - Return a new logger instance named as the first parameter using - the default factory. - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated and - then linked with its existing ancestors as well as children. - - - The name of the logger to retrieve - The logger object with the name specified - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - - Shutting down a hierarchy will safely close and remove - all appenders in all loggers including the root logger. - - - Some appenders need to be closed before the - application exists. Otherwise, pending logging events might be - lost. - - - The Shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Reset all values contained in this hierarchy instance to their default. - - - - Reset all values contained in this hierarchy instance to their - default. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set its default "off" value. - - - Existing loggers are not removed. They are just reset. - - - This method should be used sparingly and with care as it will - block all logging until it is completed. - - - - - - Log the logEvent through this hierarchy. - - the event to log - - - This method should not normally be used to log. - The interface should be used - for routine logging. This interface can be obtained - using the method. - - - The logEvent is delivered to the appropriate logger and - that logger is then responsible for logging the event. - - - - - - Returns all the Appenders that are currently configured - - An array containing all the currently configured appenders - - - Returns all the instances that are currently configured. - All the loggers are searched for appenders. The appenders may also be containers - for appenders and these are also searched for additional loggers. - - - The list returned is unordered but does not contain duplicates. - - - - - - Collect the appenders from an . - The appender may also be a container. - - - - - - - Collect the appenders from an container - - - - - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - - Initialize the log4net system using the specified appender - - the appender to use to log all logging events - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - - Initialize the log4net system using the specified config - - the element containing the root of the config - - - This method provides the same functionality as the - method implemented - on this object, but it is protected and therefore can be called by subclasses. - - - - - - Test if this hierarchy is disabled for the specified . - - The level to check against. - - true if the repository is disabled for the level argument, false otherwise. - - - - If this hierarchy has not been configured then this method will - always return true. - - - This method will return true if this repository is - disabled for level object passed as parameter and - false otherwise. - - - See also the property. - - - - - - Clear all logger definitions from the internal hashtable - - - - This call will clear all logger definitions from the internal - hashtable. Invoking this method will irrevocably mess up the - logger hierarchy. - - - You should really know what you are doing before - invoking this method. - - - - - - Return a new logger instance named as the first parameter using - . - - The name of the logger to retrieve - The factory that will make the new logger instance - The logger object with the name specified - - - If a logger of that name already exists, then it will be - returned. Otherwise, a new logger will be instantiated by the - parameter and linked with its existing - ancestors as well as children. - - - - - - Sends a logger creation event to all registered listeners - - The newly created logger - - Raises the logger creation event. - - - - - Updates all the parents of the specified logger - - The logger to update the parents for - - - This method loops through all the potential parents of - . There 3 possible cases: - - - - No entry for the potential parent of exists - - We create a ProvisionNode for this potential - parent and insert in that provision node. - - - - The entry is of type Logger for the potential parent. - - The entry is 's nearest existing parent. We - update 's parent field with this entry. We also break from - he loop because updating our parent's parent is our parent's - responsibility. - - - - The entry is of type ProvisionNode for this potential parent. - - We add to the list of children for this - potential parent. - - - - - - - - Replace a with a in the hierarchy. - - - - - - We update the links for all the children that placed themselves - in the provision node 'pn'. The second argument 'log' is a - reference for the newly created Logger, parent of all the - children in 'pn'. - - - We loop on all the children 'c' in 'pn'. - - - If the child 'c' has been already linked to a child of - 'log' then there is no need to update 'c'. - - - Otherwise, we set log's parent field to c's parent and set - c's parent field to log. - - - - - - Define or redefine a Level using the values in the argument - - the level values - - - Define or redefine a Level using the values in the argument - - - Supports setting levels via the configuration file. - - - - - - Set a Property using the values in the argument - - the property value - - - Set a Property using the values in the argument. - - - Supports setting property values via the configuration file. - - - - - - Event used to notify that a logger has been created. - - - - Event raised when a logger is created. - - - - - - Has no appender warning been emitted - - - - Flag to indicate if we have already issued a warning - about not having an appender warning. - - - - - - Get the root of this hierarchy - - - - Get the root of this hierarchy. - - - - - - Gets or sets the default instance. - - The default - - - The logger factory is used to create logger instances. - - - - - - A class to hold the value, name and display name for a level - - - - A class to hold the value, name and display name for a level - - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - - Value of the level - - - - If the value is not set (defaults to -1) the value will be looked - up for the current level with the same name. - - - - - - Name of the level - - - The name of the level - - - - The name of the level. - - - - - - Display name for the level - - - The display name of the level - - - - The display name of the level. - - - - - - A class to hold the key and data for a property set in the config file - - - - A class to hold the key and data for a property set in the config file - - - - - - Override Object.ToString to return sensible debug info - - string info about this object - - - - Property Key - - - Property Key - - - - Property Key. - - - - - - Property Value - - - Property Value - - - - Property Value. - - - - - - Used internally to accelerate hash table searches. - - - - Internal class used to improve performance of - string keyed hashtables. - - - The hashcode of the string is cached for reuse. - The string is stored as an interned value. - When comparing two objects for equality - the reference equality of the interned strings is compared. - - - Nicko Cadell - Gert Driesen - - - - Construct key with string name - - - - Initializes a new instance of the class - with the specified name. - - - Stores the hashcode of the string and interns - the string key to optimize comparisons. - - - The Compact Framework 1.0 the - method does not work. On the Compact Framework - the string keys are not interned nor are they - compared by reference. - - - The name of the logger. - - - - Returns a hash code for the current instance. - - A hash code for the current instance. - - - Returns the cached hashcode. - - - - - - Determines whether two instances - are equal. - - The to compare with the current . - - true if the specified is equal to the current ; otherwise, false. - - - - Compares the references of the interned strings. - - - - - - Provision nodes are used where no logger instance has been specified - - - - instances are used in the - when there is no specified - for that node. - - - A provision node holds a list of child loggers on behalf of - a logger that does not exist. - - - Nicko Cadell - Gert Driesen - - - - Create a new provision node with child node - - A child logger to add to this node. - - - Initializes a new instance of the class - with the specified child logger. - - - - - - The sits at the root of the logger hierarchy tree. - - - - The is a regular except - that it provides several guarantees. - - - First, it cannot be assigned a null - level. Second, since the root logger cannot have a parent, the - property always returns the value of the - level field without walking the hierarchy. - - - Nicko Cadell - Gert Driesen - - - - Construct a - - The level to assign to the root logger. - - - Initializes a new instance of the class with - the specified logging level. - - - The root logger names itself as "root". However, the root - logger cannot be retrieved by name. - - - - - - Gets the assigned level value without walking the logger hierarchy. - - The assigned level value without walking the logger hierarchy. - - - Because the root logger cannot have a parent and its level - must not be null this property just returns the - value of . - - - - - - Gets or sets the assigned for the root logger. - - - The of the root logger. - - - - Setting the level of the root logger to a null reference - may have catastrophic results. We prevent this here. - - - - - - Initializes the log4net environment using an XML DOM. - - - - Configures a using an XML DOM. - - - Nicko Cadell - Gert Driesen - - - - Construct the configurator for a hierarchy - - The hierarchy to build. - - - Initializes a new instance of the class - with the specified . - - - - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - The root element to parse. - - - Configure the hierarchy by parsing a DOM tree of XML elements. - - - - - - Parse appenders by IDREF. - - The appender ref element. - The instance of the appender that the ref refers to. - - - Parse an XML element that represents an appender and return - the appender. - - - - - - Parses an appender element. - - The appender element. - The appender instance or null when parsing failed. - - - Parse an XML element that represents an appender and return - the appender instance. - - - - - - Parses a logger element. - - The logger element. - - - Parse an XML element that represents a logger. - - - - - - Parses the root logger element. - - The root element. - - - Parse an XML element that represents the root logger. - - - - - - Parses the children of a logger element. - - The category element. - The logger instance. - Flag to indicate if the logger is the root logger. - - - Parse the child elements of a <logger> element. - - - - - - Parses an object renderer. - - The renderer element. - - - Parse an XML element that represents a renderer. - - - - - - Parses a level element. - - The level element. - The logger object to set the level on. - Flag to indicate if the logger is the root logger. - - - Parse an XML element that represents a level. - - - - - - Sets a parameter on an object. - - The parameter element. - The object to set the parameter on. - - The parameter name must correspond to a writable property - on the object. The value of the parameter is a string, - therefore this function will attempt to set a string - property first. If unable to set a string property it - will inspect the property and its argument type. It will - attempt to call a static method called Parse on the - type of the property. This method will take a single - string argument and return a value that can be used to - set the property. - - - - - Test if an element has no attributes or child elements - - the element to inspect - true if the element has any attributes or child elements, false otherwise - - - - Test if a is constructible with Activator.CreateInstance. - - the type to inspect - true if the type is creatable using a default constructor, false otherwise - - - - Look for a method on the that matches the supplied - - the type that has the method - the name of the method - the method info found - - - The method must be a public instance method on the . - The method must be named or "Add" followed by . - The method must take a single parameter. - - - - - - Converts a string value to a target type. - - The type of object to convert the string to. - The string value to use as the value of the object. - - - An object of type with value or - null when the conversion could not be performed. - - - - - - Creates an object as specified in XML. - - The XML element that contains the definition of the object. - The object type to use if not explicitly specified. - The type that the returned object must be or must inherit from. - The object or null - - - Parse an XML element and create an object instance based on the configuration - data. - - - The type of the instance may be specified in the XML. If not - specified then the is used - as the type. However the type is specified it must support the - type. - - - - - - key: appenderName, value: appender. - - - - - The Hierarchy being configured. - - - - - Delegate used to handle logger repository shutdown event notifications - - The that is shutting down. - Empty event args - - - Delegate used to handle logger repository shutdown event notifications. - - - - - - Delegate used to handle logger repository configuration reset event notifications - - The that has had its configuration reset. - Empty event args - - - Delegate used to handle logger repository configuration reset event notifications. - - - - - - Delegate used to handle event notifications for logger repository configuration changes. - - The that has had its configuration changed. - Empty event arguments. - - - Delegate used to handle event notifications for logger repository configuration changes. - - - - - - Write the name of the current AppDomain to the output - - - - Write the name of the current AppDomain to the output writer - - - Nicko Cadell - - - - Write the name of the current AppDomain to the output - - the writer to write to - null, state is not set - - - Writes name of the current AppDomain to the output . - - - - - - Write the current date to the output - - - - Date pattern converter, uses a to format - the current date and time to the writer as a string. - - - The value of the determines - the formatting of the date. The following values are allowed: - - - Option value - Output - - - ISO8601 - - Uses the formatter. - Formats using the "yyyy-MM-dd HH:mm:ss,fff" pattern. - - - - DATE - - Uses the formatter. - Formats using the "dd MMM yyyy HH:mm:ss,fff" for example, "06 Nov 1994 15:49:37,459". - - - - ABSOLUTE - - Uses the formatter. - Formats using the "HH:mm:ss,fff" for example, "15:49:37,459". - - - - other - - Any other pattern string uses the formatter. - This formatter passes the pattern string to the - method. - For details on valid patterns see - DateTimeFormatInfo Class. - - - - - - The date and time is in the local time zone and is rendered in that zone. - To output the time in Universal time see . - - - Nicko Cadell - - - - The used to render the date to a string - - - - The used to render the date to a string - - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write the current date to the output - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date and time passed is in the local time zone. - - - - - - Write the current thread identity to the output - - - - Write the current thread identity to the output writer - - - Nicko Cadell - - - - Write the current thread identity to the output - - the writer to write to - null, state is not set - - - Writes the current thread identity to the output . - - - - - - Pattern converter for literal string instances in the pattern - - - - Writes the literal string value specified in the - property to - the output. - - - Nicko Cadell - - - - Set the next converter in the chain - - The next pattern converter in the chain - The next pattern converter - - - Special case the building of the pattern converter chain - for instances. Two adjacent - literals in the pattern can be represented by a single combined - pattern converter. This implementation detects when a - is added to the chain - after this converter and combines its value with this converter's - literal value. - - - - - - Write the literal to the output - - the writer to write to - null, not set - - - Override the formatting behavior to ignore the FormattingInfo - because we have a literal instead. - - - Writes the value of - to the output . - - - - - - Convert this pattern into the rendered message - - that will receive the formatted result. - null, not set - - - This method is not used. - - - - - - Writes a newline to the output - - - - Writes the system dependent line terminator to the output. - This behavior can be overridden by setting the : - - - - Option Value - Output - - - DOS - DOS or Windows line terminator "\r\n" - - - UNIX - UNIX line terminator "\n" - - - - Nicko Cadell - - - - Initialize the converter - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write the current process ID to the output - - - - Write the current process ID to the output writer - - - Nicko Cadell - - - - Write the current process ID to the output - - the writer to write to - null, state is not set - - - Write the current process ID to the output . - - - - - - Property pattern converter - - - - This pattern converter reads the thread and global properties. - The thread properties take priority over global properties. - See for details of the - thread properties. See for - details of the global properties. - - - If the is specified then that will be used to - lookup a single property. If no is specified - then all properties will be dumped as a list of key value pairs. - - - Nicko Cadell - - - - Write the property value to the output - - that will receive the formatted result. - null, state is not set - - - Writes out the value of a named property. The property name - should be set in the - property. - - - If the is set to null - then all the properties are written as key value pairs. - - - - - - A Pattern converter that generates a string of random characters - - - - The converter generates a string of random characters. By default - the string is length 4. This can be changed by setting the - to the string value of the length required. - - - The random characters in the string are limited to uppercase letters - and numbers only. - - - The random number generator used by this class is not cryptographically secure. - - - Nicko Cadell - - - - Shared random number generator - - - - - Length of random string to generate. Default length 4. - - - - - Initialize the converter options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Write a randoim string to the output - - the writer to write to - null, state is not set - - - Write a randoim string to the output . - - - - - - Write the current threads username to the output - - - - Write the current threads username to the output writer - - - Nicko Cadell - - - - Write the current threads username to the output - - the writer to write to - null, state is not set - - - Write the current threads username to the output . - - - - - - Write the UTC date time to the output - - - - Date pattern converter, uses a to format - the current date and time in Universal time. - - - See the for details on the date pattern syntax. - - - - Nicko Cadell - - - - Write the current date and time to the output - - that will receive the formatted result. - null, state is not set - - - Pass the current date and time to the - for it to render it to the writer. - - - The date is in Universal time when it is rendered. - - - - - - - Type converter for Boolean. - - - - Supports conversion from string to bool type. - - - - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Convert the source object to the type supported by this object - - the object to convert - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Exception base type for conversion errors. - - - - This type extends . It - does not add any new functionality but does differentiate the - type of exception being thrown. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - A message to include with the exception. - - - Initializes a new instance of the class - with the specified message. - - - - - - Constructor - - A message to include with the exception. - A nested exception to include. - - - Initializes a new instance of the class - with the specified message and inner exception. - - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - An instance of the . - - - Creates a new instance of the class. - - - - - - Creates a new instance of the class. - - The conversion destination type. - The value to convert. - A nested exception to include. - An instance of the . - - - Creates a new instance of the class. - - - - - - Register of type converters for specific types. - - - - Maintains a registry of type converters used to convert between - types. - - - Use the and - methods to register new converters. - The and methods - lookup appropriate converters to use. - - - - - Nicko Cadell - Gert Driesen - - - - Private constructor - - - Initializes a new instance of the class. - - - - - Static constructor. - - - - This constructor defines the intrinsic type converters. - - - - - - Adds a converter for a specific type. - - The type being converted to. - The type converter to use to convert to the destination type. - - - Adds a converter instance for a specific type. - - - - - - Adds a converter for a specific type. - - The type being converted to. - The type of the type converter to use to convert to the destination type. - - - Adds a converter for a specific type. - - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted from. - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - - Gets the type converter to use to convert values to the destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - Gets the type converter to use to convert values to the destination type. - - - - - - Lookups the type converter to use as specified by the attributes on the - destination type. - - The type being converted to. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - - Creates the instance of the type converter. - - The type of the type converter. - - The type converter instance to use for type conversions or null - if no type converter is found. - - - - The type specified for the type converter must implement - the or interfaces - and must have a public default (no argument) constructor. - - - - - - Mapping from to type converter. - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - Gert Driesen - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an encoding - the encoding - - - Uses the method to - convert the argument to an . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Interface supported by type converters - - - - This interface supports conversion from a single type to arbitrary types. - See . - - - Nicko Cadell - - - - Returns whether this converter can convert the object to the specified type - - A Type that represents the type you want to convert to - true if the conversion is possible - - - Test if the type supported by this converter can be converted to the - . - - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Converts the (which must be of the type supported - by this converter) to the specified.. - - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to an IPAddress - the IPAddress - - - Uses the method to convert the - argument to an . - If that fails then the string is resolved as a DNS hostname. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Valid characters in an IPv4 or IPv6 address string. (Does not support subnets) - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternLayout - the PatternLayout - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Convert between string and - - - - Supports conversion from string to type, - and from a type to a string. - - - The string is used as the - of the . - - - - - - Nicko Cadell - - - - Can the target type be converted to the type supported by this object - - A that represents the type you want to convert to - true if the conversion is possible - - - Returns true if the is - assignable from a type. - - - - - - Converts the given value object to the specified type, using the arguments - - the object to convert - The Type to convert the value parameter to - the converted object - - - Uses the method to convert the - argument to a . - - - - The object cannot be converted to the - . To check for this condition use the - method. - - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a PatternString - the PatternString - - - Creates and returns a new using - the as the - . - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Supports conversion from string to type. - - - - Supports conversion from string to type. - - - - - - Nicko Cadell - - - - Can the source type be converted to the type supported by this object - - the type to convert - true if the conversion is possible - - - Returns true if the is - the type. - - - - - - Overrides the ConvertFrom method of IConvertFrom. - - the object to convert to a Type - the Type - - - Uses the method to convert the - argument to a . - Additional effort is made to locate partially specified types - by searching the loaded assemblies. - - - - The object cannot be converted to the - target type. To check for this condition use the - method. - - - - - Attribute used to associate a type converter - - - - Class and Interface level attribute that specifies a type converter - to use with the associated type. - - - To associate a type converter with a target type apply a - TypeConverterAttribute to the target type. Specify the - type of the type converter on the attribute. - - - Nicko Cadell - Gert Driesen - - - - The string type name of the type converter - - - - - Default constructor - - - - Default constructor - - - - - - Create a new type converter attribute for the specified type name - - The string type name of the type converter - - - The type specified must implement the - or the interfaces. - - - - - - Create a new type converter attribute for the specified type - - The type of the type converter - - - The type specified must implement the - or the interfaces. - - - - - - The string type name of the type converter - - - The string type name of the type converter - - - - The type specified must implement the - or the interfaces. - - - - - - A straightforward implementation of the interface. - - - - This is the default implementation of the - interface. Implementors of the interface - should aggregate an instance of this type. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Append on on all attached appenders. - - The event being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - - Append on on all attached appenders. - - The array of events being logged. - The number of appenders called. - - - Calls the method on all - attached appenders. - - - - - - Calls the DoAppende method on the with - the objects supplied. - - The appender - The events - - - If the supports the - interface then the will be passed - through using that interface. Otherwise the - objects in the array will be passed one at a time. - - - - - - Attaches an appender. - - The appender to add. - - - If the appender is already in the list it won't be added again. - - - - - - Gets an attached appender with the specified name. - - The name of the appender to get. - - The appender with the name specified, or null if no appender with the - specified name is found. - - - - Lookup an attached appender by name. - - - - - - Removes all attached appenders. - - - - Removes and closes all attached appenders - - - - - - Removes the specified appender from the list of attached appenders. - - The appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - Removes the appender with the specified name from the list of appenders. - - The name of the appender to remove. - The appender removed from the list - - - The appender removed is not closed. - If you are discarding the appender you must call - on the appender removed. - - - - - - List of appenders - - - - - Array of appenders, used to cache the m_appenderList - - - - - Gets all attached appenders. - - - A collection of attached appenders, or null if there - are no attached appenders. - - - - The read only collection of all currently attached appenders. - - - - - - This class aggregates several PropertiesDictionary collections together. - - - - Provides a dictionary style lookup over an ordered list of - collections. - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Add a Properties Dictionary to this composite collection - - the properties to add - - - Properties dictionaries added first take precedence over dictionaries added - later. - - - - - - Flatten this composite collection into a single properties dictionary - - the flattened dictionary - - - Reduces the collection of ordered dictionaries to a single dictionary - containing the resultant values for the keys. - - - - - - Gets the value of a property - - - The value for the property with the specified key - - - - Looks up the value for the specified. - The collections are searched - in the order in which they were added to this collection. The value - returned is the value held by the first collection that contains - the specified key. - - - If none of the collections contain the specified key then - null is returned. - - - - - - Base class for Context Properties implementations - - - - This class defines a basic property get set accessor - - - Nicko Cadell - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - - Subclass of that maintains a count of - the number of bytes written. - - - - This writer counts the number of bytes written. - - - Nicko Cadell - Gert Driesen - - - - that does not leak exceptions - - - - does not throw exceptions when things go wrong. - Instead, it delegates error handling to its . - - - Nicko Cadell - Gert Driesen - - - - Adapter that extends and forwards all - messages to an instance of . - - - - Adapter that extends and forwards all - messages to an instance of . - - - Nicko Cadell - - - - The writer to forward messages to - - - - - Create an instance of that forwards all - messages to a . - - The to forward to - - - Create an instance of that forwards all - messages to a . - - - - - - Closes the writer and releases any system resources associated with the writer - - - - - - - - - Dispose this writer - - flag indicating if we are being disposed - - - Dispose this writer - - - - - - Flushes any buffered output - - - - Clears all buffers for the writer and causes any buffered data to be written - to the underlying device - - - - - - Writes a character to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a character to the wrapped TextWriter - - - - - - Writes a character buffer to the wrapped TextWriter - - the data buffer - the start index - the number of characters to write - - - Writes a character buffer to the wrapped TextWriter - - - - - - Writes a string to the wrapped TextWriter - - the value to write to the TextWriter - - - Writes a string to the wrapped TextWriter - - - - - - Gets or sets the underlying . - - - The underlying . - - - - Gets or sets the underlying . - - - - - - The Encoding in which the output is written - - - The - - - - The Encoding in which the output is written - - - - - - Gets an object that controls formatting - - - The format provider - - - - Gets an object that controls formatting - - - - - - Gets or sets the line terminator string used by the TextWriter - - - The line terminator to use - - - - Gets or sets the line terminator string used by the TextWriter - - - - - - Constructor - - the writer to actually write to - the error handler to report error to - - - Create a new QuietTextWriter using a writer and error handler - - - - - - Writes a character to the underlying writer - - the char to write - - - Writes a character to the underlying writer - - - - - - Writes a buffer to the underlying writer - - the buffer to write - the start index to write from - the number of characters to write - - - Writes a buffer to the underlying writer - - - - - - Writes a string to the output. - - The string data to write to the output. - - - Writes a string to the output. - - - - - - Closes the underlying output writer. - - - - Closes the underlying output writer. - - - - - - The error handler instance to pass all errors to - - - - - Flag to indicate if this writer is closed - - - - - Gets or sets the error handler that all errors are passed to. - - - The error handler that all errors are passed to. - - - - Gets or sets the error handler that all errors are passed to. - - - - - - Gets a value indicating whether this writer is closed. - - - true if this writer is closed, otherwise false. - - - - Gets a value indicating whether this writer is closed. - - - - - - Constructor - - The to actually write to. - The to report errors to. - - - Creates a new instance of the class - with the specified and . - - - - - - Writes a character to the underlying writer and counts the number of bytes written. - - the char to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Writes a buffer to the underlying writer and counts the number of bytes written. - - the buffer to write - the start index to write from - the number of characters to write - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Writes a string to the output and counts the number of bytes written. - - The string data to write to the output. - - - Overrides implementation of . Counts - the number of bytes written. - - - - - - Total number of bytes written. - - - - - Gets or sets the total number of bytes written. - - - The total number of bytes written. - - - - Gets or sets the total number of bytes written. - - - - - - A fixed size rolling buffer of logging events. - - - - An array backed fixed size leaky bucket. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The maximum number of logging events in the buffer. - - - Initializes a new instance of the class with - the specified maximum number of buffered logging events. - - - The argument is not a positive integer. - - - - Appends a to the buffer. - - The event to append to the buffer. - The event discarded from the buffer, if the buffer is full, otherwise null. - - - Append an event to the buffer. If the buffer still contains free space then - null is returned. If the buffer is full then an event will be dropped - to make space for the new event, the event dropped is returned. - - - - - - Get and remove the oldest event in the buffer. - - The oldest logging event in the buffer - - - Gets the oldest (first) logging event in the buffer and removes it - from the buffer. - - - - - - Pops all the logging events from the buffer into an array. - - An array of all the logging events in the buffer. - - - Get all the events in the buffer and clear the buffer. - - - - - - Clear the buffer - - - - Clear the buffer of all events. The events in the buffer are lost. - - - - - - Gets the th oldest event currently in the buffer. - - The th oldest event currently in the buffer. - - - If is outside the range 0 to the number of events - currently in the buffer, then null is returned. - - - - - - Gets the maximum size of the buffer. - - The maximum size of the buffer. - - - Gets the maximum size of the buffer - - - - - - Gets the number of logging events in the buffer. - - The number of logging events in the buffer. - - - This number is guaranteed to be in the range 0 to - (inclusive). - - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - The singleton instance of the empty collection. - - - - - Gets the singleton instance of the empty collection. - - The singleton instance of the empty collection. - - - Gets the singleton instance of the empty collection. - - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - - Gets the number of elements contained in the . - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - - An always empty . - - - - A singleton implementation of the - interface that always represents an empty collection. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Copies the elements of the to an - , starting at a particular Array index. - - The one-dimensional - that is the destination of the elements copied from - . The Array must have zero-based - indexing. - The zero-based index in array at which - copying begins. - - - As the collection is empty no values are copied into the array. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - Adds an element with the provided key and value to the - . - - The to use as the key of the element to add. - The to use as the value of the element to add. - - - As the collection is empty no new values can be added. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - Removes all elements from the . - - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - Determines whether the contains an element - with the specified key. - - The key to locate in the . - false - - - As the collection is empty the method always returns false. - - - - - - Returns an enumerator that can iterate through a collection. - - - An that can be used to - iterate through the collection. - - - - As the collection is empty a is returned. - - - - - - Removes the element with the specified key from the . - - The key of the element to remove. - - - As the collection is empty no values can be removed. A - is thrown if this method is called. - - - This dictionary is always empty and cannot be modified. - - - - The singleton instance of the empty dictionary. - - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets a value indicating if access to the is synchronized (thread-safe). - - - true if access to the is synchronized (thread-safe); otherwise, false. - - - - For the this property is always true. - - - - - - Gets the number of elements contained in the - - - The number of elements contained in the . - - - - As the collection is empty the is always 0. - - - - - - Gets an object that can be used to synchronize access to the . - - - An object that can be used to synchronize access to the . - - - - As the collection is empty and thread safe and synchronized this instance is also - the object. - - - - - - Gets a value indicating whether the has a fixed size. - - true - - - As the collection is empty always returns true. - - - - - - Gets a value indicating whether the is read-only. - - true - - - As the collection is empty always returns true. - - - - - - Gets an containing the keys of the . - - An containing the keys of the . - - - As the collection is empty a is returned. - - - - - - Gets an containing the values of the . - - An containing the values of the . - - - As the collection is empty a is returned. - - - - - - Gets or sets the element with the specified key. - - The key of the element to get or set. - null - - - As the collection is empty no values can be looked up or stored. - If the index getter is called then null is returned. - A is thrown if the setter is called. - - - This dictionary is always empty and cannot be modified. - - - - Contain the information obtained when parsing formatting modifiers - in conversion modifiers. - - - - Holds the formatting information extracted from the format string by - the . This is used by the - objects when rendering the output. - - - Nicko Cadell - Gert Driesen - - - - Defaut Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - - - Initializes a new instance of the class - with the specified parameters. - - - - - - Gets or sets the minimum value. - - - The minimum value. - - - - Gets or sets the minimum value. - - - - - - Gets or sets the maximum value. - - - The maximum value. - - - - Gets or sets the maximum value. - - - - - - Gets or sets a flag indicating whether left align is enabled - or not. - - - A flag indicating whether left align is enabled or not. - - - - Gets or sets a flag indicating whether left align is enabled or not. - - - - - - Implementation of Properties collection for the - - - - This class implements a properties collection that is thread safe and supports both - storing properties and capturing a read only copy of the current propertied. - - - This class is optimized to the scenario where the properties are read frequently - and are modified infrequently. - - - Nicko Cadell - - - - The read only copy of the properties. - - - - This variable is declared volatile to prevent the compiler and JIT from - reordering reads and writes of this thread performed on different threads. - - - - - - Lock object used to synchronize updates within this instance - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property from the global context - - the key for the entry to remove - - - Removing an entry from the global context properties is relatively expensive compared - with reading a value. - - - - - - Clear the global context properties - - - - - Get a readonly immutable copy of the properties - - the current global context properties - - - This implementation is fast because the GlobalContextProperties class - stores a readonly copy of the properties. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Reading the value for a key is faster than setting the value. - When the value is written a new read only copy of - the properties is created. - - - - - - Manages a mapping from levels to - - - - Manages an ordered mapping from instances - to subclasses. - - - Nicko Cadell - - - - Default constructor - - - - Initialise a new instance of . - - - - - - Add a to this mapping - - the entry to add - - - If a has previously been added - for the same then that entry will be - overwritten. - - - - - - Lookup the mapping for the specified level - - the level to lookup - the for the level or null if no mapping found - - - Lookup the value for the specified level. Finds the nearest - mapping value for the level that is equal to or less than the - specified. - - - If no mapping could be found then null is returned. - - - - - - Initialize options - - - - Caches the sorted list of in an array - - - - - - Outputs log statements from within the log4net assembly. - - - - Log4net components cannot make log4net logging calls. However, it is - sometimes useful for the user to learn about what log4net is - doing. - - - All log4net internal debug calls go to the standard output stream - whereas internal error messages are sent to the standard error output - stream. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Static constructor that initializes logging by reading - settings from the application configuration file. - - - - The log4net.Internal.Debug application setting - controls internal debugging. This setting should be set - to true to enable debugging. - - - The log4net.Internal.Quiet application setting - suppresses all internal logging including error messages. - This setting should be set to true to enable message - suppression. - - - - - - Writes log4net internal debug messages to the - standard output stream. - - The message to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - - Writes log4net internal debug messages to the - standard output stream. - - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net: ". - - - - - - Writes log4net internal warning messages to the - standard error stream. - - The message to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - - Writes log4net internal warning messages to the - standard error stream. - - The message to log. - An exception to log. - - - All internal warning messages are prepended with - the string "log4net:WARN ". - - - - - - Writes log4net internal error messages to the - standard error stream. - - The message to log. - - - All internal error messages are prepended with - the string "log4net:ERROR ". - - - - - - Writes log4net internal error messages to the - standard error stream. - - The message to log. - An exception to log. - - - All internal debug messages are prepended with - the string "log4net:ERROR ". - - - - - - Writes output to the standard output stream. - - The message to log. - - - Writes to both Console.Out and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - - Writes output to the standard error stream. - - The message to log. - - - Writes to both Console.Error and System.Diagnostics.Trace. - Note that the System.Diagnostics.Trace is not supported - on the Compact Framework. - - - If the AppDomain is not configured with a config file then - the call to System.Diagnostics.Trace may fail. This is only - an issue if you are programmatically creating your own AppDomains. - - - - - - Default debug level - - - - - In quietMode not even errors generate any output. - - - - - Gets or sets a value indicating whether log4net internal logging - is enabled or disabled. - - - true if log4net internal logging is enabled, otherwise - false. - - - - When set to true, internal debug level logging will be - displayed. - - - This value can be set by setting the application setting - log4net.Internal.Debug in the application configuration - file. - - - The default value is false, i.e. debugging is - disabled. - - - - - The following example enables internal debugging using the - application configuration file : - - - - - - - - - - - - - Gets or sets a value indicating whether log4net should generate no output - from internal logging, not even for errors. - - - true if log4net should generate no output at all from internal - logging, otherwise false. - - - - When set to true will cause internal logging at all levels to be - suppressed. This means that no warning or error reports will be logged. - This option overrides the setting and - disables all debug also. - - This value can be set by setting the application setting - log4net.Internal.Quiet in the application configuration file. - - - The default value is false, i.e. internal logging is not - disabled. - - - - The following example disables internal logging using the - application configuration file : - - - - - - - - - - - - Test if LogLog.Debug is enabled for output. - - - true if Debug is enabled - - - - Test if LogLog.Debug is enabled for output. - - - - - - Test if LogLog.Warn is enabled for output. - - - true if Warn is enabled - - - - Test if LogLog.Warn is enabled for output. - - - - - - Test if LogLog.Error is enabled for output. - - - true if Error is enabled - - - - Test if LogLog.Error is enabled for output. - - - - - - Represents a native error code and message. - - - - Represents a Win32 platform native error. - - - Nicko Cadell - Gert Driesen - - - - Create an instance of the class with the specified - error number and message. - - The number of the native error. - The message of the native error. - - - Create an instance of the class with the specified - error number and message. - - - - - - Create a new instance of the class for the last Windows error. - - - An instance of the class for the last windows error. - - - - The message for the error number is lookup up using the - native Win32 FormatMessage function. - - - - - - Create a new instance of the class. - - the error number for the native error - - An instance of the class for the specified - error number. - - - - The message for the specified error number is lookup up using the - native Win32 FormatMessage function. - - - - - - Retrieves the message corresponding with a Win32 message identifier. - - Message identifier for the requested message. - - The message corresponding with the specified message identifier. - - - - The message will be searched for in system message-table resource(s) - using the native FormatMessage function. - - - - - - Return error information string - - error information string - - - Return error information string - - - - - - Formats a message string. - - Formatting options, and how to interpret the parameter. - Location of the message definition. - Message identifier for the requested message. - Language identifier for the requested message. - If includes FORMAT_MESSAGE_ALLOCATE_BUFFER, the function allocates a buffer using the LocalAlloc function, and places the pointer to the buffer at the address specified in . - If the FORMAT_MESSAGE_ALLOCATE_BUFFER flag is not set, this parameter specifies the maximum number of TCHARs that can be stored in the output buffer. If FORMAT_MESSAGE_ALLOCATE_BUFFER is set, this parameter specifies the minimum number of TCHARs to allocate for an output buffer. - Pointer to an array of values that are used as insert values in the formatted message. - - - The function requires a message definition as input. The message definition can come from a - buffer passed into the function. It can come from a message table resource in an - already-loaded module. Or the caller can ask the function to search the system's message - table resource(s) for the message definition. The function finds the message definition - in a message table resource based on a message identifier and a language identifier. - The function copies the formatted message text to an output buffer, processing any embedded - insert sequences if requested. - - - To prevent the usage of unsafe code, this stub does not support inserting values in the formatted message. - - - - - If the function succeeds, the return value is the number of TCHARs stored in the output - buffer, excluding the terminating null character. - - - If the function fails, the return value is zero. To get extended error information, - call . - - - - - - Gets the number of the native error. - - - The number of the native error. - - - - Gets the number of the native error. - - - - - - Gets the message of the native error. - - - The message of the native error. - - - - - Gets the message of the native error. - - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Test if the enumerator can advance, if so advance. - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - - The singleton instance of the . - - - - - Gets the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current key from the enumerator. - - - Throws an exception because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current value from the enumerator. - - The current value from the enumerator. - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - Gets the current entry from the enumerator. - - - Throws an because the - never has a current entry. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - An always empty . - - - - A singleton implementation of the over a collection - that is empty and not modifiable. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to enforce the singleton pattern. - - - - - - Test if the enumerator can advance, if so advance - - false as the cannot advance. - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will always return false. - - - - - - Resets the enumerator back to the start. - - - - As the enumerator is over an empty collection does nothing. - - - - - - The singleton instance of the . - - - - - Get the singleton instance of the . - - The singleton instance of the . - - - Gets the singleton instance of the . - - - - - - Gets the current object from the enumerator. - - - Throws an because the - never has a current value. - - - - As the enumerator is over an empty collection its - value cannot be moved over a valid position, therefore - will throw an . - - - The collection is empty and - cannot be positioned over a valid location. - - - - A SecurityContext used when a SecurityContext is not required - - - - The is a no-op implementation of the - base class. It is used where a - is required but one has not been provided. - - - Nicko Cadell - - - - Singleton instance of - - - - Singleton instance of - - - - - - Private constructor - - - - Private constructor for singleton pattern. - - - - - - Impersonate this SecurityContext - - State supplied by the caller - null - - - No impersonation is done and null is always returned. - - - - - - Implements log4net's default error handling policy which consists - of emitting a message for the first error in an appender and - ignoring all subsequent errors. - - - - The error message is printed on the standard error output stream. - - - This policy aims at protecting an otherwise working application - from being flooded with error messages when logging fails. - - - Nicko Cadell - Gert Driesen - - - - Default Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - The prefix to use for each message. - - - Initializes a new instance of the class - with the specified prefix. - - - - - - Log an Error - - The error message. - The exception. - The internal error code. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - - Log an Error - - The error message. - The exception. - - - Prints the message and the stack trace of the exception on the standard - error output stream. - - - - - - Log an error - - The error message. - - - Print a the error message passed as parameter on the standard - error output stream. - - - - - - Flag to indicate if it is the first error - - - - - String to prefix each message with - - - - - Is error logging enabled - - - - Is error logging enabled. Logging is only enabled for the - first error delivered to the . - - - - - - A convenience class to convert property values to specific types. - - - - Utility functions for converting types and parsing values. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Converts a string to a value. - - String to convert. - The default value. - The value of . - - - If is "true", then true is returned. - If is "false", then false is returned. - Otherwise, is returned. - - - - - - Parses a file size into a number. - - String to parse. - The default value. - The value of . - - - Parses a file size of the form: number[KB|MB|GB] into a - long value. It is scaled with the appropriate multiplier. - - - is returned when - cannot be converted to a value. - - - - - - Converts a string to an object. - - The target type to convert to. - The string to convert to an object. - - The object converted from a string or null when the - conversion failed. - - - - Converts a string to an object. Uses the converter registry to try - to convert the string value into the specified target type. - - - - - - Checks if there is an appropriate type conversion from the source type to the target type. - - The type to convert from. - The type to convert to. - true if there is a conversion from the source type to the target type. - - Checks if there is an appropriate type conversion from the source type to the target type. - - - - - - - Converts an object to the target type. - - The object to convert to the target type. - The type to convert to. - The converted object. - - - Converts an object to the target type. - - - - - - Instantiates an object given a class name. - - The fully qualified class name of the object to instantiate. - The class to which the new object should belong. - The object to return in case of non-fulfillment. - - An instance of the or - if the object could not be instantiated. - - - - Checks that the is a subclass of - . If that test fails or the object could - not be instantiated, then is returned. - - - - - - Performs variable substitution in string from the - values of keys found in . - - The string on which variable substitution is performed. - The dictionary to use to lookup variables. - The result of the substitutions. - - - The variable substitution delimiters are ${ and }. - - - For example, if props contains key=value, then the call - - - - string s = OptionConverter.SubstituteVariables("Value of key is ${key}."); - - - - will set the variable s to "Value of key is value.". - - - If no value could be found for the specified key, then substitution - defaults to an empty string. - - - For example, if system properties contains no value for the key - "nonExistentKey", then the call - - - - string s = OptionConverter.SubstituteVariables("Value of nonExistentKey is [${nonExistentKey}]"); - - - - will set s to "Value of nonExistentKey is []". - - - An Exception is thrown if contains a start - delimiter "${" which is not balanced by a stop delimiter "}". - - - - - - Converts the string representation of the name or numeric value of one or - more enumerated constants to an equivalent enumerated object. - - The type to convert to. - The enum string value. - If true, ignore case; otherwise, regard case. - An object of type whose value is represented by . - - - - Most of the work of the class - is delegated to the PatternParser class. - - - - The PatternParser processes a pattern string and - returns a chain of objects. - - - Nicko Cadell - Gert Driesen - - - - Constructor - - The pattern to parse. - - - Initializes a new instance of the class - with the specified pattern string. - - - - - - Parses the pattern into a chain of pattern converters. - - The head of a chain of pattern converters. - - - Parses the pattern into a chain of pattern converters. - - - - - - Build the unified cache of converters from the static and instance maps - - the list of all the converter names - - - Build the unified cache of converters from the static and instance maps - - - - - - Internal method to parse the specified pattern to find specified matches - - the pattern to parse - the converter names to match in the pattern - - - The matches param must be sorted such that longer strings come before shorter ones. - - - - - - Process a parsed literal - - the literal text - - - - Process a parsed converter pattern - - the name of the converter - the optional option for the converter - the formatting info for the converter - - - - Resets the internal state of the parser and adds the specified pattern converter - to the chain. - - The pattern converter to add. - - - - The first pattern converter in the chain - - - - - the last pattern converter in the chain - - - - - The pattern - - - - - Internal map of converter identifiers to converter types - - - - This map overrides the static s_globalRulesRegistry map. - - - - - - Get the converter registry used by this parser - - - The converter registry used by this parser - - - - Get the converter registry used by this parser - - - - - - Sort strings by length - - - - that orders strings by string length. - The longest strings are placed first - - - - - - This class implements a patterned string. - - - - This string has embedded patterns that are resolved and expanded - when the string is formatted. - - - This class functions similarly to the - in that it accepts a pattern and renders it to a string. Unlike the - however the PatternString - does not render the properties of a specific but - of the process in general. - - - The recognized conversion pattern names are: - - - - Conversion Pattern Name - Effect - - - appdomain - - - Used to output the friendly name of the current AppDomain. - - - - - date - - - Used to output the date of the logging event in the local time zone. - To output the date in universal time use the %utcdate pattern. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %date{HH:mm:ss,fff} or - %date{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %date{ISO8601} or %date{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - env - - - Used to output the a specific environment variable. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %env{COMPUTERNAME} would include the value - of the COMPUTERNAME environment variable. - - - The env pattern is not supported on the .NET Compact Framework. - - - - - identity - - - Used to output the user name for the currently active user - (Principal.Identity.Name). - - - - - newline - - - Outputs the platform dependent line separator character or - characters. - - - This conversion pattern name offers the same performance as using - non-portable line separator strings such as "\n", or "\r\n". - Thus, it is the preferred way of specifying a line separator. - - - - - processid - - - Used to output the system process ID for the current process. - - - - - property - - - Used to output a specific context property. The key to - lookup must be specified within braces and directly following the - pattern specifier, e.g. %property{user} would include the value - from the property that is keyed by the string 'user'. Each property value - that is to be included in the log must be specified separately. - Properties are stored in logging contexts. By default - the log4net:HostName property is set to the name of machine on - which the event was originally logged. - - - If no key is specified, e.g. %property then all the keys and their - values are printed in a comma separated list. - - - The properties of an event are combined from a number of different - contexts. These are listed below in the order in which they are searched. - - - - the thread properties - - The that are set on the current - thread. These properties are shared by all events logged on this thread. - - - - the global properties - - The that are set globally. These - properties are shared by all the threads in the AppDomain. - - - - - - - random - - - Used to output a random string of characters. The string is made up of - uppercase letters and numbers. By default the string is 4 characters long. - The length of the string can be specified within braces directly following the - pattern specifier, e.g. %random{8} would output an 8 character string. - - - - - username - - - Used to output the WindowsIdentity for the currently - active user. - - - - - utcdate - - - Used to output the date of the logging event in universal time. - The date conversion - specifier may be followed by a date format specifier enclosed - between braces. For example, %utcdate{HH:mm:ss,fff} or - %utcdate{dd MMM yyyy HH:mm:ss,fff}. If no date format specifier is - given then ISO8601 format is - assumed (). - - - The date format specifier admits the same syntax as the - time pattern string of the . - - - For better results it is recommended to use the log4net date - formatters. These can be specified using one of the strings - "ABSOLUTE", "DATE" and "ISO8601" for specifying - , - and respectively - . For example, - %utcdate{ISO8601} or %utcdate{ABSOLUTE}. - - - These dedicated date formatters perform significantly - better than . - - - - - % - - - The sequence %% outputs a single percent sign. - - - - - - Additional pattern converters may be registered with a specific - instance using or - . - - - See the for details on the - format modifiers supported by the patterns. - - - Nicko Cadell - - - - Internal map of converter identifiers to converter types. - - - - - the pattern - - - - - the head of the pattern converter chain - - - - - patterns defined on this PatternString only - - - - - Initialize the global registry - - - - - Default constructor - - - - Initialize a new instance of - - - - - - Constructs a PatternString - - The pattern to use with this PatternString - - - Initialize a new instance of with the pattern specified. - - - - - - Initialize object options - - - - This is part of the delayed object - activation scheme. The method must - be called on this object after the configuration properties have - been set. Until is called this - object is in an undefined state and must not be used. - - - If any of the configuration properties are modified then - must be called again. - - - - - - Create the used to parse the pattern - - the pattern to parse - The - - - Returns PatternParser used to parse the conversion string. Subclasses - may override this to return a subclass of PatternParser which recognize - custom conversion pattern name. - - - - - - Produces a formatted string as specified by the conversion pattern. - - The TextWriter to write the formatted event to - - - Format the pattern to the . - - - - - - Format the pattern as a string - - the pattern formatted as a string - - - Format the pattern to a string. - - - - - - Add a converter to this PatternString - - the converter info - - - This version of the method is used by the configurator. - Programmatic users should use the alternative method. - - - - - - Add a converter to this PatternString - - the name of the conversion pattern for this converter - the type of the converter - - - Add a converter to this PatternString - - - - - - Gets or sets the pattern formatting string - - - The pattern formatting string - - - - The ConversionPattern option. This is the string which - controls formatting and consists of a mix of literal content and - conversion specifiers. - - - - - - Wrapper class used to map converter names to converter types - - - - Wrapper class used to map converter names to converter types - - - - - - default constructor - - - - - Gets or sets the name of the conversion pattern - - - The name of the conversion pattern - - - - Gets or sets the name of the conversion pattern - - - - - - Gets or sets the type of the converter - - - The type of the converter - - - - Gets or sets the type of the converter - - - - - - String keyed object map. - - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - - String keyed object map that is read only. - - - - This collection is readonly and cannot be modified. - - - While this collection is serializable only member - objects that are serializable will - be serialized along with this collection. - - - Nicko Cadell - Gert Driesen - - - - The Hashtable used to store the properties data - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Copy Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - - Gets the key names. - - An array of all the keys. - - - Gets the key names. - - - - - - Test if the dictionary contains a specified key - - the key to look for - true if the dictionary contains the specified key - - - Test if the dictionary contains a specified key - - - - - - See - - - - - See - - - - - - See - - - - - - - Remove all properties from the properties collection - - - - - See - - - - - - - See - - - - - - - See - - - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - - The hashtable used to store the properties - - - The internal collection used to store the properties - - - - The hashtable used to store the properties - - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - The number of properties in this collection - - - - - See - - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Constructor - - properties to copy - - - Initializes a new instance of the class. - - - - - - Remove the entry with the specified key from this dictionary - - the key for the entry to remove - - - Remove the entry with the specified key from this dictionary - - - - - - See - - an enumerator - - - Returns a over the contest of this collection. - - - - - - See - - the key to remove - - - Remove the entry with the specified key from this dictionary - - - - - - See - - the key to lookup in the collection - true if the collection contains the specified key - - - Test if this collection contains a specified key. - - - - - - Remove all properties from the properties collection - - - - Remove all properties from the properties collection - - - - - - See - - the key - the value to store for the key - - - Store a value for the specified . - - - Thrown if the is not a string - - - - See - - - - - - - See - - - - - Gets or sets the value of the property with the specified key. - - - The value of the property with the specified key. - - The key of the property to get or set. - - - The property value will only be serialized if it is serializable. - If it cannot be serialized it will be silently ignored if - a serialization operation is performed. - - - - - - See - - - false - - - - This collection is modifiable. This property always - returns false. - - - - - - See - - - The value for the key specified. - - - - Get or set a value for the specified . - - - Thrown if the is not a string - - - - See - - - - - See - - - - - See - - - - - See - - - - - See - - - - - A that ignores the message - - - - This writer is used in special cases where it is necessary - to protect a writer from being closed by a client. - - - Nicko Cadell - - - - Constructor - - the writer to actually write to - - - Create a new ProtectCloseTextWriter using a writer - - - - - - Attach this instance to a different underlying - - the writer to attach to - - - Attach this instance to a different underlying - - - - - - Does not close the underlying output writer. - - - - Does not close the underlying output writer. - This method does nothing. - - - - - - Defines a lock that supports single writers and multiple readers - - - - ReaderWriterLock is used to synchronize access to a resource. - At any given time, it allows either concurrent read access for - multiple threads, or write access for a single thread. In a - situation where a resource is changed infrequently, a - ReaderWriterLock provides better throughput than a simple - one-at-a-time lock, such as . - - - If a platform does not support a System.Threading.ReaderWriterLock - implementation then all readers and writers are serialized. Therefore - the caller must not rely on multiple simultaneous readers. - - - Nicko Cadell - - - - Constructor - - - - Initializes a new instance of the class. - - - - - - Acquires a reader lock - - - - blocks if a different thread has the writer - lock, or if at least one thread is waiting for the writer lock. - - - - - - Decrements the lock count - - - - decrements the lock count. When the count - reaches zero, the lock is released. - - - - - - Acquires the writer lock - - - - This method blocks if another thread has a reader lock or writer lock. - - - - - - Decrements the lock count on the writer lock - - - - ReleaseWriterLock decrements the writer lock count. - When the count reaches zero, the writer lock is released. - - - - - - A that can be and reused - - - - A that can be and reused. - This uses a single buffer for string operations. - - - Nicko Cadell - - - - Create an instance of - - the format provider to use - - - Create an instance of - - - - - - Override Dispose to prevent closing of writer - - flag - - - Override Dispose to prevent closing of writer - - - - - - Reset this string writer so that it can be reused. - - the maximum buffer capacity before it is trimmed - the default size to make the buffer - - - Reset this string writer so that it can be reused. - The internal buffers are cleared and reset. - - - - - - Utility class for system specific information. - - - - Utility class of static methods for system specific information. - - - Nicko Cadell - Gert Driesen - Alexey Solofnenko - - - - Private constructor to prevent instances. - - - - Only static methods are exposed from this type. - - - - - - Initialize default values for private static fields. - - - - Only static methods are exposed from this type. - - - - - - Gets the assembly location path for the specified assembly. - - The assembly to get the location for. - The location of the assembly. - - - This method does not guarantee to return the correct path - to the assembly. If only tries to give an indication as to - where the assembly was loaded from. - - - - - - Gets the fully qualified name of the , including - the name of the assembly from which the was - loaded. - - The to get the fully qualified name for. - The fully qualified name for the . - - - This is equivalent to the Type.AssemblyQualifiedName property, - but this method works on the .NET Compact Framework 1.0 as well as - the full .NET runtime. - - - - - - Gets the short name of the . - - The to get the name for. - The short name of the . - - - The short name of the assembly is the - without the version, culture, or public key. i.e. it is just the - assembly's file name without the extension. - - - Use this rather than Assembly.GetName().Name because that - is not available on the Compact Framework. - - - Because of a FileIOPermission security demand we cannot do - the obvious Assembly.GetName().Name. We are allowed to get - the of the assembly so we - start from there and strip out just the assembly name. - - - - - - Gets the file name portion of the , including the extension. - - The to get the file name for. - The file name of the assembly. - - - Gets the file name portion of the , including the extension. - - - - - - Loads the type specified in the type string. - - A sibling type to use to load the type. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified, it will be loaded from the assembly - containing the specified relative type. If the type is not found in the assembly - then all the loaded assemblies will be searched for the type. - - - - - - Loads the type specified in the type string. - - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the - assembly that is directly calling this method. If the type is not found - in the assembly then all the loaded assemblies will be searched for the type. - - - - - - Loads the type specified in the type string. - - An assembly to load the type from. - The name of the type to load. - Flag set to true to throw an exception if the type cannot be loaded. - true to ignore the case of the type name; otherwise, false - The type loaded or null if it could not be loaded. - - - If the type name is fully qualified, i.e. if contains an assembly name in - the type name, the type will be loaded from the system using - . - - - If the type name is not fully qualified it will be loaded from the specified - assembly. If the type is not found in the assembly then all the loaded assemblies - will be searched for the type. - - - - - - Generate a new guid - - A new Guid - - - Generate a new guid - - - - - - Create an - - The name of the parameter that caused the exception - The value of the argument that causes this exception - The message that describes the error - the ArgumentOutOfRangeException object - - - Create a new instance of the class - with a specified error message, the parameter name, and the value - of the argument. - - - The Compact Framework does not support the 3 parameter constructor for the - type. This method provides an - implementation that works for all platforms. - - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - - Parse a string into an value - - the string to parse - out param where the parsed value is placed - true if the string was able to be parsed into an integer - - - Attempts to parse the string into an integer. If the string cannot - be parsed then this method returns false. The method does not throw an exception. - - - - - - Lookup an application setting - - the application settings key to lookup - the value for the key, or null - - - Configuration APIs are not supported under the Compact Framework - - - - - - Convert a path into a fully qualified local file path. - - The path to convert. - The fully qualified path. - - - Converts the path specified to a fully - qualified path. If the path is relative it is - taken as relative from the application base - directory. - - - The path specified must be a local file path, a URI is not supported. - - - - - - Creates a new case-insensitive instance of the class with the default initial capacity. - - A new case-insensitive instance of the class with the default initial capacity - - - The new Hashtable instance uses the default load factor, the CaseInsensitiveHashCodeProvider, and the CaseInsensitiveComparer. - - - - - - Gets an empty array of types. - - - - The Type.EmptyTypes field is not available on - the .NET Compact Framework 1.0. - - - - - - Cache the host name for the current machine - - - - - Cache the application friendly name - - - - - Text to output when a null is encountered. - - - - - Text to output when an unsupported feature is requested. - - - - - Start time for the current process. - - - - - Gets the system dependent line terminator. - - - The system dependent line terminator. - - - - Gets the system dependent line terminator. - - - - - - Gets the base directory for this . - - The base directory path for the current . - - - Gets the base directory for this . - - - The value returned may be either a local file path or a URI. - - - - - - Gets the path to the configuration file for the current . - - The path to the configuration file for the current . - - - The .NET Compact Framework 1.0 does not have a concept of a configuration - file. For this runtime, we use the entry assembly location as the root for - the configuration file name. - - - The value returned may be either a local file path or a URI. - - - - - - Gets the path to the file that first executed in the current . - - The path to the entry assembly. - - - Gets the path to the file that first executed in the current . - - - - - - Gets the ID of the current thread. - - The ID of the current thread. - - - On the .NET framework, the AppDomain.GetCurrentThreadId method - is used to obtain the thread ID for the current thread. This is the - operating system ID for the thread. - - - On the .NET Compact Framework 1.0 it is not possible to get the - operating system thread ID for the current thread. The native method - GetCurrentThreadId is implemented inline in a header file - and cannot be called. - - - On the .NET Framework 2.0 the Thread.ManagedThreadId is used as this - gives a stable id unrelated to the operating system thread ID which may - change if the runtime is using fibers. - - - - - - Get the host name or machine name for the current machine - - - The hostname or machine name - - - - Get the host name or machine name for the current machine - - - The host name () or - the machine name (Environment.MachineName) for - the current machine, or if neither of these are available - then NOT AVAILABLE is returned. - - - - - - Get this application's friendly name - - - The friendly name of this application as a string - - - - If available the name of the application is retrieved from - the AppDomain using AppDomain.CurrentDomain.FriendlyName. - - - Otherwise the file name of the entry assembly is used. - - - - - - Get the start time for the current process. - - - - This is the time at which the log4net library was loaded into the - AppDomain. Due to reports of a hang in the call to System.Diagnostics.Process.StartTime - this is not the start time for the current process. - - - The log4net library should be loaded by an application early during its - startup, therefore this start time should be a good approximation for - the actual start time. - - - Note that AppDomains may be loaded and unloaded within the - same process without the process terminating, however this start time - will be set per AppDomain. - - - - - - Text to output when a null is encountered. - - - - Use this value to indicate a null has been encountered while - outputting a string representation of an item. - - - The default value is (null). This value can be overridden by specifying - a value for the log4net.NullText appSetting in the application's - .config file. - - - - - - Text to output when an unsupported feature is requested. - - - - Use this value when an unsupported feature is requested. - - - The default value is NOT AVAILABLE. This value can be overridden by specifying - a value for the log4net.NotAvailableText appSetting in the application's - .config file. - - - - - - Generate GUIDs on the .NET Compact Framework. - - - - - Return a new System.Guid object. - - - - - Utility class that represents a format string. - - - - Utility class that represents a format string. - - - Nicko Cadell - - - - Initialise the - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - - - Format the string and arguments - - the formatted string - - - - Replaces the format item in a specified with the text equivalent - of the value of a corresponding instance in a specified array. - A specified parameter supplies culture-specific formatting information. - - An that supplies culture-specific formatting information. - A containing zero or more format items. - An array containing zero or more objects to format. - - A copy of format in which the format items have been replaced by the - equivalent of the corresponding instances of in args. - - - - This method does not throw exceptions. If an exception thrown while formatting the result the - exception and arguments are returned in the result string. - - - - - - Process an error during StringFormat - - - - - Dump the contents of an array into a string builder - - - - - Dump an object to a string - - - - - Implementation of Properties collection for the - - - - Class implements a collection of properties that is specific to each thread. - The class is not synchronized as each thread has its own . - - - Nicko Cadell - - - - The thread local data slot to use to store a PropertiesDictionary. - - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Remove a property - - the key for the entry to remove - - - Remove a property - - - - - - Clear all properties - - - - Clear all properties - - - - - - Get the PropertiesDictionary for this thread. - - create the dictionary if it does not exist, otherwise return null if is does not exist - the properties for this thread - - - The collection returned is only to be used on the calling thread. If the - caller needs to share the collection between different threads then the - caller must clone the collection before doing so. - - - - - - Gets or sets the value of a property - - - The value for the property with the specified key - - - - Gets or sets the value of a property - - - - - - Implementation of Stack for the - - - - Implementation of Stack for the - - - Nicko Cadell - - - - The stack store. - - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Clears all the contextual information held in this stack. - - - - Clears all the contextual information held in this stack. - Only call this if you think that this tread is being reused after - a previous call execution which may not have completed correctly. - You do not need to use this method if you always guarantee to call - the method of the - returned from even in exceptional circumstances, - for example by using the using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - syntax. - - - - - - Removes the top context from this stack. - - The message in the context that was removed from the top of this stack. - - - Remove the top context from this stack, and return - it to the caller. If this stack is empty then an - empty string (not ) is returned. - - - - - - Pushes a new context message into this stack. - - The new context message. - - An that can be used to clean up the context stack. - - - - Pushes a new context onto this stack. An - is returned that can be used to clean up this stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.ThreadContext.Stacks["NDC"].Push("Stack_Message")) - { - log.Warn("This should have an ThreadContext Stack message"); - } - - - - - - Gets the current context information for this stack. - - The current context information. - - - - Gets the current context information for this stack. - - Gets the current context information - - - Gets the current context information for this stack. - - - - - - Get a portable version of this object - - the portable instance of this object - - - Get a cross thread portable version of this object - - - - - - The number of messages in the stack - - - The current number of messages in the stack - - - - The current number of messages in the stack. That is - the number of times has been called - minus the number of times has been called. - - - - - - Gets and sets the internal stack used by this - - The internal storage stack - - - This property is provided only to support backward compatability - of the . Tytpically the internal stack should not - be modified. - - - - - - Inner class used to represent a single context frame in the stack. - - - - Inner class used to represent a single context frame in the stack. - - - - - - Constructor - - The message for this context. - The parent context in the chain. - - - Initializes a new instance of the class - with the specified message and parent context. - - - - - - Get the message. - - The message. - - - Get the message. - - - - - - Gets the full text of the context down to the root level. - - - The full text of the context down to the root level. - - - - Gets the full text of the context down to the root level. - - - - - - Struct returned from the method. - - - - This struct implements the and is designed to be used - with the pattern to remove the stack frame at the end of the scope. - - - - - - The ThreadContextStack internal stack - - - - - The depth to trim the stack to when this instance is disposed - - - - - Constructor - - The internal stack used by the ThreadContextStack. - The depth to return the stack to when this object is disposed. - - - Initializes a new instance of the class with - the specified stack and return depth. - - - - - - Returns the stack to the correct depth. - - - - Returns the stack to the correct depth. - - - - - - Subclass of to - provide missing methods. - - - - The Compact Framework version of the - class is missing the Clear and Clone methods. - This subclass adds implementations of those missing methods. - - - - - - Clears the stack of all elements. - - - - Clears the stack of all elements. - - - - - - Makes a shallow copy of the stack's elements. - - A new stack that has a shallow copy of the stack's elements. - - - Makes a shallow copy of the stack's elements. - - - - - - Implementation of Stacks collection for the - - - - Implementation of Stacks collection for the - - - Nicko Cadell - - - - Internal constructor - - - - Initializes a new instance of the class. - - - - - - Gets the named thread context stack - - - The named stack - - - - Gets the named thread context stack - - - - - - Utility class for transforming strings. - - - - Utility class for transforming strings. - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - Write a string to an - - the writer to write to - the string to write - The string to replace non XML compliant chars with - - - The test is escaped either using XML escape entities - or using CDATA sections. - - - - - - Replace invalid XML characters in text string - - the XML text input string - the string to use in place of invalid characters - A string that does not contain invalid XML characters. - - - Certain Unicode code points are not allowed in the XML InfoSet, for - details see: http://www.w3.org/TR/REC-xml/#charsets. - - - This method replaces any illegal characters in the input string - with the mask string specified. - - - - - - Count the number of times that the substring occurs in the text - - the text to search - the substring to find - the number of times the substring occurs in the text - - - The substring is assumed to be non repeating within itself. - - - - - - The log4net Global Context. - - - - The GlobalContext provides a location for global debugging - information to be stored. - - - The global context has a properties map and these properties can - be included in the output of log messages. The - supports selecting and outputing these properties. - - - By default the log4net:HostName property is set to the name of - the current machine. - - - - - GlobalContext.Properties["hostname"] = Environment.MachineName; - - - - Nicko Cadell - - - - Private Constructor. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - The global context properties instance - - - - - The global properties map. - - - The global properties map. - - - - The global properties map. - - - - - - This class is used by client applications to request logger instances. - - - - This class has static methods that are used by a client to request - a logger instance. The method is - used to retrieve a logger. - - - See the interface for more details. - - - Simple example of logging messages - - ILog log = LogManager.GetLogger("application-log"); - - log.Info("Application Start"); - log.Debug("This is a debug message"); - - if (log.IsDebugEnabled) - { - log.Debug("This is another debug message"); - } - - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - Returns the named logger if it exists. - - Returns the named logger if it exists. - - - - If the named logger exists (in the default repository) then it - returns a reference to the logger, otherwise it returns null. - - - The fully qualified logger name to look for. - The logger found, or null if no logger could be found. - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the specified repository) then it - returns a reference to the logger, otherwise it returns - null. - - - The repository to lookup in. - The fully qualified logger name to look for. - - The logger found, or null if the logger doesn't exist in the specified - repository. - - - - - Returns the named logger if it exists. - - - - If the named logger exists (in the repository for the specified assembly) then it - returns a reference to the logger, otherwise it returns - null. - - - The assembly to use to lookup the repository. - The fully qualified logger name to look for. - - The logger, or null if the logger doesn't exist in the specified - assembly's repository. - - - - Get the currently defined loggers. - - Returns all the currently defined loggers in the default repository. - - - The root logger is not included in the returned array. - - All the defined loggers. - - - - Returns all the currently defined loggers in the specified repository. - - The repository to lookup in. - - The root logger is not included in the returned array. - - All the defined loggers. - - - - Returns all the currently defined loggers in the specified assembly's repository. - - The assembly to use to lookup the repository. - - The root logger is not included in the returned array. - - All the defined loggers. - - - Get or create a logger. - - Retrieves or creates a named logger. - - - - Retrieves a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The name of the logger to retrieve. - The logger with the name specified. - - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The repository to lookup in. - The name of the logger to retrieve. - The logger with the name specified. - - - - Retrieves or creates a named logger. - - - - Retrieve a logger named as the - parameter. If the named logger already exists, then the - existing instance will be returned. Otherwise, a new instance is - created. - - - By default, loggers do not have a set level but inherit - it from the hierarchy. This is one of the central features of - log4net. - - - The assembly to use to lookup the repository. - The name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Get the logger for the fully qualified name of the type specified. - - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The repository to lookup in. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shorthand for . - - - Gets the logger for the fully qualified name of the type specified. - - The assembly to use to lookup the repository. - The full name of will be used as the name of the logger to retrieve. - The logger with the name specified. - - - - Shuts down the log4net system. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in all the - default repositories. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - Shutdown a logger repository. - - Shuts down the default repository. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - default repository. - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - - - - Shuts down the repository for the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The repository to shutdown. - - - - Shuts down the repository specified. - - - - Calling this method will safely close and remove all - appenders in all the loggers including root contained in the - repository. The repository is looked up using - the specified. - - - Some appenders need to be closed before the application exists. - Otherwise, pending logging events might be lost. - - - The shutdown method is careful to close nested - appenders before closing regular appenders. This is allows - configurations where a regular appender is attached to a logger - and again to a nested appender. - - - The assembly to use to lookup the repository. - - - Reset the configuration of a repository - - Resets all values contained in this repository instance to their defaults. - - - - Resets all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The repository to reset. - - - - Resets all values contained in this repository instance to their defaults. - - - - Reset all values contained in the repository instance to their - defaults. This removes all appenders from all loggers, sets - the level of all non-root loggers to null, - sets their additivity flag to true and sets the level - of the root logger to . Moreover, - message disabling is set to its default "off" value. - - - The assembly to use to lookup the repository to reset. - - - Get the logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - - Get a logger repository. - - Returns the default instance. - - - - Gets the for the repository specified - by the callers assembly (). - - - The instance for the default repository. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The repository to lookup in. - - - - Returns the default instance. - - The default instance. - - - Gets the for the repository specified - by the argument. - - - The assembly to use to lookup the repository. - - - Create a domain - - Creates a repository with the specified repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - Create a logger repository. - - Creates a repository with the specified repository type. - - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - The created will be associated with the repository - specified such that a call to will return - the same repository instance. - - - - - - Creates a repository with the specified name. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name. - - - - Creates the default type of which is a - object. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique amongst repositories. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - - Creates a repository with the specified name and repository type. - - - - The name must be unique. Repositories cannot be redefined. - An will be thrown if the repository already exists. - - - The name of the repository, this must be unique to the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - The specified repository already exists. - - - - Creates a repository for the specified assembly and repository type. - - - - CreateDomain is obsolete. Use CreateRepository instead of CreateDomain. - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - - Creates a repository for the specified assembly and repository type. - - - - The created will be associated with the repository - specified such that a call to with the - same assembly specified will return the same repository instance. - - - The assembly to use to get the name of the repository. - A that implements - and has a no arg constructor. An instance of this type will be created to act - as the for the repository specified. - The created for the repository. - - - - Gets the list of currently defined repositories. - - - - Get an array of all the objects that have been created. - - - An array of all the known objects. - - - - Looks up the wrapper object for the logger specified. - - The logger to get the wrapper for. - The wrapper for the logger specified. - - - - Looks up the wrapper objects for the loggers specified. - - The loggers to get the wrappers for. - The wrapper objects for the loggers specified. - - - - Create the objects used by - this manager. - - The logger to wrap. - The wrapper for the logger specified. - - - - The wrapper map to use to hold the objects. - - - - - Implementation of Mapped Diagnostic Contexts. - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - The MDC class is similar to the class except that it is - based on a map instead of a stack. It provides mapped - diagnostic contexts. A Mapped Diagnostic Context, or - MDC in short, is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The MDC is managed on a per thread basis. - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Gets the context value identified by the parameter. - - The key to lookup in the MDC. - The string value held for the key, or a null reference if no corresponding value is found. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - If the parameter does not look up to a - previously defined context then null will be returned. - - - - - - Add an entry to the MDC - - The key to store the value under. - The value to store. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Puts a context value (the parameter) as identified - with the parameter into the current thread's - context map. - - - If a value is already defined for the - specified then the value will be replaced. If the - is specified as null then the key value mapping will be removed. - - - - - - Removes the key value mapping for the key specified. - - The key to remove. - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove the specified entry from this thread's MDC - - - - - - Clear all entries in the MDC - - - - - The MDC is deprecated and has been replaced by the . - The current MDC implementation forwards to the ThreadContext.Properties. - - - - Remove all the entries from this thread's MDC - - - - - - Implementation of Nested Diagnostic Contexts. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - A Nested Diagnostic Context, or NDC in short, is an instrument - to distinguish interleaved log output from different sources. Log - output is typically interleaved when a server handles multiple - clients near-simultaneously. - - - Interleaved log output can still be meaningful if each log entry - from different contexts had a distinctive stamp. This is where NDCs - come into play. - - - Note that NDCs are managed on a per thread basis. The NDC class - is made up of static methods that operate on the context of the - calling thread. - - - How to push a message into the context - - using(NDC.Push("my context message")) - { - ... all log calls will have 'my context message' included ... - - } // at the end of the using block the message is automatically removed - - - - Nicko Cadell - Gert Driesen - - - - Initializes a new instance of the class. - - - Uses a private access modifier to prevent instantiation of this class. - - - - - Clears all the contextual information held on the current thread. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Clears the stack of NDC data held on the current thread. - - - - - - Creates a clone of the stack of context information. - - A clone of the context info for this thread. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The results of this method can be passed to the - method to allow child threads to inherit the context of their - parent thread. - - - - - - Inherits the contextual information from another thread. - - The context stack to inherit. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This thread will use the context information from the stack - supplied. This can be used to initialize child threads with - the same contextual information as their parent threads. These - contexts will NOT be shared. Any further contexts that - are pushed onto the stack will not be visible to the other. - Call to obtain a stack to pass to - this method. - - - - - - Removes the top context from the stack. - - - The message in the context that was removed from the top - of the stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Remove the top context from the stack, and return - it to the caller. If the stack is empty then an - empty string (not null) is returned. - - - - - - Pushes a new context message. - - The new context message. - - An that can be used to clean up - the context stack. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Pushes a new context onto the context stack. An - is returned that can be used to clean up the context stack. This - can be easily combined with the using keyword to scope the - context. - - - Simple example of using the Push method with the using keyword. - - using(log4net.NDC.Push("NDC_Message")) - { - log.Warn("This should have an NDC message"); - } - - - - - - Removes the context information for this thread. It is - not required to call this method. - - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - This method is not implemented. - - - - - - Forces the stack depth to be at most . - - The maximum depth of the stack - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - Forces the stack depth to be at most . - This may truncate the head of the stack. This only affects the - stack in the current thread. Also it does not prevent it from - growing, it only sets the maximum depth at the time of the - call. This can be used to return to a known context depth. - - - - - - Gets the current context depth. - - The current context depth. - - - - The NDC is deprecated and has been replaced by the . - The current NDC implementation forwards to the ThreadContext.Stacks["NDC"]. - - - - The number of context values pushed onto the context stack. - - - Used to record the current depth of the context. This can then - be restored using the method. - - - - - - - The log4net Thread Context. - - - - The ThreadContext provides a location for thread specific debugging - information to be stored. - The ThreadContext properties override any - properties with the same name. - - - The thread context has a properties map and a stack. - The properties and stack can - be included in the output of log messages. The - supports selecting and outputting these properties. - - - The Thread Context provides a diagnostic context for the current thread. - This is an instrument for distinguishing interleaved log - output from different sources. Log output is typically interleaved - when a server handles multiple clients near-simultaneously. - - - The Thread Context is managed on a per thread basis. - - - Example of using the thread context properties to store a username. - - ThreadContext.Properties["user"] = userName; - log.Info("This log message has a ThreadContext Property called 'user'"); - - - Example of how to push a message into the context stack - - using(ThreadContext.Stacks["NDC"].Push("my context message")) - { - log.Info("This log message has a ThreadContext Stack message that includes 'my context message'"); - - } // at the end of the using block the message is automatically popped - - - - Nicko Cadell - - - - Private Constructor. - - - - Uses a private access modifier to prevent instantiation of this class. - - - - - - The thread context properties instance - - - - - The thread context stacks instance - - - - - The thread properties map - - - The thread properties map - - - - The ThreadContext properties override any - properties with the same name. - - - - - - The thread stacks - - - stack map - - - - The thread local stacks. - - - -
    -
    diff --git a/mvc1/HowToBuild.txt b/mvc1/HowToBuild.txt deleted file mode 100644 index f580e05..0000000 --- a/mvc1/HowToBuild.txt +++ /dev/null @@ -1,29 +0,0 @@ -1. Get the Ninject version for which you want to build this extension. Compiled versions can be found on Build Server: - http://teamcity.codebetter.com/viewType.html?tab=buildTypeStatusDiv&buildTypeId=bt243 -2. Copy all the zipped ninject files to lib/Ninject -3. Get Ninject.Extensions.ContextPreservation e.g. from the build server - http://teamcity.codebetter.com/viewType.html?buildTypeId=bt360&tab=buildTypeStatusDiv - and copy all the zip files to /lib/Ninject.Extensions.ContextPreservation -4. Run UnzipDependencies.cmd -5. Run build-release.cmd - -If you are trying to build for a particular platform, please download and install the respective SDKs: - WP7: you need the Windows Phone Developer tools (http://create.msdn.com/en-us/home/getting_started). - .NET Compact Framework 3.5: you need .NET Compact Framework 3.5 Redistributable - http://www.microsoft.com/downloads/details.aspx?FamilyID=e3821449-3c6b-42f1-9fd9-0041345b3385 - Microsoft® Silverlight™ 2: http://www.microsoft.com/downloads/details.aspx?FamilyID=8d933343-038f-499c-986c-c3c7e87a60b3 - Microsoft® Silverlight™ 3: http://www.microsoft.com/downloads/details.aspx?FamilyID=1ea49236-0de7-41b1-81c8-a126ff39975b - Microsoft® Silverlight™ 4: follow directions on this page: http://www.silverlight.net/getstarted - Mono 2.X : http://www.go-mono.com/mono-downloads/download.html - -This rest of this file is only needed if you are running the NAnt scripts provided. - -If you do not need to run Microsoft® Silverlight™ unit tests, simply pass "-D:skip.silverlightTests=true" in the build command to skip them. - -If you would like to run Microsoft® Silverlight™ tests, you need to allow the creation of a local service host and need to follow the steps outlined below. -Before building the first time you have to perform the following steps: -1. Run cmd.exe as Administrator. -2. Enter the following command in the command prompt putting in your own domain and user name: - netsh http add urlacl url=http://+:8887/ user=DOMAIN\user - or this should do it for you - netsh http add urlacl url=http://+:8887/ user=%UserDomain%\%UserName% -3. If it worked, you should see "URL reservation successfully added" in the command window. \ No newline at end of file diff --git a/mvc1/LICENSE.txt b/mvc1/LICENSE.txt deleted file mode 100644 index 20230c5..0000000 --- a/mvc1/LICENSE.txt +++ /dev/null @@ -1,175 +0,0 @@ -Ninject is intended to be used in both open-source and commercial environments. To allow its use in as many -situations as possible, Ninject is dual-licensed. You may choose to use Ninject under either the Apache License, -Version 2.0, or the Microsoft Public License (Ms-PL). These licenses are essentially identical, but you are -encouraged to evaluate both to determine which best fits your intended use. - ------ - -Apache License, Version 2.0 - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 -through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, -or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, -direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or -(ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source -code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, -including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, -as indicated by a copyright notice that is included in or attached to the work (an example is provided in the -Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) -the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, -as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include -works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative -Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications -or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion -in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the -copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written -communication sent to the Licensor or its representatives, including but not limited to communication on electronic -mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, -the Licensor for the purpose of discussing and improving the Work, but excluding communication that is -conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been -received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. - -Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, -non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or -Object form. - -3. Grant of Patent License. - -Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, -non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, -have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to -those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone -or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You -institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging -that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent -infringement, then any patent licenses granted to You under this License for that Work shall terminate as of -the date such litigation is filed. - -4. Redistribution. - -You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You meet the following conditions: - - 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and - 2. You must cause any modified files to carry prominent notices stating that You changed the files; and - 3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, - trademark, and attribution notices from the Source form of the Work, excluding those notices that do not - pertain to any part of the Derivative Works; and - 4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You - distribute must include a readable copy of the attribution notices contained within such NOTICE file, - excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the - following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source - form or documentation, if provided along with the Derivative Works; or, within a display generated by the - Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file - are for informational purposes only and do not modify the License. You may add Your own attribution notices - within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, - provided that such additional attribution notices cannot be construed as modifying the License. - 5. You may add Your own copyright statement to Your modifications and may provide additional or different license - terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative - Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the - conditions stated in this License. - -5. Submission of Contributions. - -Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You -to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you -may have executed with Licensor regarding such Contributions. - -6. Trademarks. - -This License does not grant permission to use the trade names, trademarks, service marks, or product names of the -Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing -the content of the NOTICE file. - -7. Disclaimer of Warranty. - -Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides -its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, -including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS -FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing -the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. - -In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless -required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any -Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential -damages of any character arising as a result of this License or out of the use or inability to use the Work -(including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, -or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility -of such damages. - -9. Accepting Warranty or Additional Liability. - -While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, -acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole -responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold -each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - ------ - -Microsoft Public License (Ms-PL) - -This license governs use of the accompanying software. If you use the software, you -accept this license. If you do not accept the license, do not use the software. - -1. Definitions -The terms "reproduce," "reproduction," "derivative works," and "distribution" have the -same meaning here as under U.S. copyright law. -A "contribution" is the original software, or any additions or changes to the software. -A "contributor" is any person that distributes its contribution under this license. -"Licensed patents" are a contributor's patent claims that read directly on its contribution. - -2. Grant of Rights -(A) Copyright Grant- Subject to the terms of this license, including the license conditions and - limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free - copyright license to reproduce its contribution, prepare derivative works of its contribution, - and distribute its contribution or any derivative works that you create. -(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations - in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under - its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose - of its contribution in the software or derivative works of the contribution in the software. - -3. Conditions and Limitations -(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, - or trademarks. -(B) If you bring a patent claim against any contributor over patents that you claim are infringed by - the software, your patent license from such contributor to the software ends automatically. -(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, - and attribution notices that are present in the software. -(D) If you distribute any portion of the software in source code form, you may do so only under this - license by including a complete copy of this license with your distribution. If you distribute - any portion of the software in compiled or object code form, you may only do so under a license - that complies with this license. -(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express - warranties, guarantees or conditions. You may have additional consumer rights under your local laws - which this license cannot change. To the extent permitted under your local laws, the contributors - exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. \ No newline at end of file diff --git a/mvc1/Ninject.Web.Mvc.build b/mvc1/Ninject.Web.Mvc.build deleted file mode 100644 index 25ac878..0000000 --- a/mvc1/Ninject.Web.Mvc.build +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvc1/Ninject.Web.Mvc.sln b/mvc1/Ninject.Web.Mvc.sln deleted file mode 100644 index d464039..0000000 --- a/mvc1/Ninject.Web.Mvc.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{77BE2A9F-F61F-45D4-A5C5-1DF0DA05EA42}" - ProjectSection(SolutionItems) = preProject - README.markdown = README.markdown - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ninject.Web.Mvc", "src\Ninject.Web.Mvc\Ninject.Web.Mvc.csproj", "{82222179-0EB8-4C43-AD48-6EA388349C64}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {82222179-0EB8-4C43-AD48-6EA388349C64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82222179-0EB8-4C43-AD48-6EA388349C64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82222179-0EB8-4C43-AD48-6EA388349C64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82222179-0EB8-4C43-AD48-6EA388349C64}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/mvc1/Ninject.build b/mvc1/Ninject.build deleted file mode 100644 index 0044e2c..0000000 --- a/mvc1/Ninject.build +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/mvc1/Ninject.include b/mvc1/Ninject.include deleted file mode 100644 index f6a9bc1..0000000 --- a/mvc1/Ninject.include +++ /dev/null @@ -1,792 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This will detect whether the current Operating System is running as a 32-bit or 64-bit Operating System regardless of whether this is a 32-bit or 64-bit process. - - - - - - - - - - - - - - - Detects whether we are currently in a WoW64 process or not. - - - - - - - - - - - - - Detects whether we are currently in a 32-bit or 64-bit process (not necessarily what the OS is running). Note that as of the time of this writing, this will ALWAYS return false because NAnt is compiled to run in 32-bit mode only. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mvc1/ReleaseNotes.txt b/mvc1/ReleaseNotes.txt deleted file mode 100644 index 684b025..0000000 --- a/mvc1/ReleaseNotes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Version 3.0.0.0 ---------------- -- Changed: This extension requires now Ninject.Web.Common. This allows combining it with the other web extesnions (WCF + MVC) diff --git a/mvc1/UnzipDependencies.cmd b/mvc1/UnzipDependencies.cmd deleted file mode 100644 index 4b715cf..0000000 --- a/mvc1/UnzipDependencies.cmd +++ /dev/null @@ -1,5 +0,0 @@ -..\tools\nant\nant.exe -buildfile:Ninject.build UnzipDependencies %1 %2 %3 %4 %5 %6 %7 %8 - -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc1/build-alpha.cmd b/mvc1/build-alpha.cmd deleted file mode 100644 index f7403b3..0000000 --- a/mvc1/build-alpha.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-alpha" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-alpha" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc1/build-beta.cmd b/mvc1/build-beta.cmd deleted file mode 100644 index 9d0984a..0000000 --- a/mvc1/build-beta.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-beta" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-beta" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc1/build-rc1.cmd b/mvc1/build-rc1.cmd deleted file mode 100644 index ae54073..0000000 --- a/mvc1/build-rc1.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-rc1" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-rc1" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc1/build-release.cmd b/mvc1/build-release.cmd deleted file mode 100644 index 5361bbd..0000000 --- a/mvc1/build-release.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc1/build.cmd b/mvc1/build.cmd deleted file mode 100644 index 52aa285..0000000 --- a/mvc1/build.cmd +++ /dev/null @@ -1,3 +0,0 @@ -..\tools\nant\nant.exe -buildfile:Ninject.build %1 %2 %3 %4 %5 %6 %7 %8 - -pause \ No newline at end of file diff --git a/mvc1/nuget/Ninject.Web.Mvc.nuspec b/mvc1/nuget/Ninject.Web.Mvc.nuspec deleted file mode 100644 index f646ad7..0000000 --- a/mvc1/nuget/Ninject.Web.Mvc.nuspec +++ /dev/null @@ -1,20 +0,0 @@ - - - - Ninject.Web.Mvc1 - 2.2.0.1 - Nate Kohari, Ian Davis, Remo Gloor - true - https://github.com/ninject/ninject.web.mvc/raw/master/mvc1/LICENSE.txt - Extension for Ninject providing integration with ASP.NET MVC1 - Extension for Ninject providing integration with ASP.NET MVC1 - en-US - Ninject ioc di web mvc - https://github.com/ninject/ninject/raw/master/logos/Ninject-Logo32.png - http://www.ninject.org - - - - - - \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc.sln b/mvc1/src/Ninject.Web.Mvc.sln deleted file mode 100644 index 13a92ac..0000000 --- a/mvc1/src/Ninject.Web.Mvc.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ninject.Web.Mvc", "Ninject.Web.Mvc\Ninject.Web.Mvc.csproj", "{82222179-0EB8-4C43-AD48-6EA388349C64}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {82222179-0EB8-4C43-AD48-6EA388349C64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82222179-0EB8-4C43-AD48-6EA388349C64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82222179-0EB8-4C43-AD48-6EA388349C64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82222179-0EB8-4C43-AD48-6EA388349C64}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/mvc1/src/Ninject.Web.Mvc/MvcModule.cs b/mvc1/src/Ninject.Web.Mvc/MvcModule.cs deleted file mode 100644 index bbb23f6..0000000 --- a/mvc1/src/Ninject.Web.Mvc/MvcModule.cs +++ /dev/null @@ -1,45 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc -{ - using System.Web; - using System.Web.Routing; - using Ninject.Modules; - using Ninject.Web.Common; - - /// - /// The mvc nodule - /// - public class MvcModule : GlobalKernelRegistrationModule - { - /// - /// Loads the module into the kernel. - /// - public override void Load() - { - base.Load(); - this.Kernel.Components.Add(); - - this.Bind().ToConstant(RouteTable.Routes); - this.Bind().ToMethod(ctx => HttpContext.Current).InTransientScope(); - this.Bind().ToMethod(ctx => new HttpContextWrapper(HttpContext.Current)).InTransientScope(); - } - } -} \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj b/mvc1/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj deleted file mode 100644 index d94ba27..0000000 --- a/mvc1/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj +++ /dev/null @@ -1,123 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {82222179-0EB8-4C43-AD48-6EA388349C64} - Library - Properties - Ninject.Web.Mvc - Ninject.Web.Mvc - v3.5 - 512 - true - ..\Ninject.snk - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - ..\..\build\debug\ - DEBUG;TRACE - prompt - 4 - - - true - AllRules.ruleset - - - pdbonly - true - ..\..\build\release\ - TRACE - prompt - 4 - ..\..\build\release\Ninject.Web.Mvc.xml - true - AllRules.ruleset - - - - ..\..\..\lib\Ninject\net-3.5\Ninject.dll - - - ..\..\..\lib\Ninject.Web.Common\net-3.5\Ninject.Web.Common.dll - - - - 3.5 - - - - False - ..\..\lib\System.Web.Abstractions.dll - 3.5 - - - False - ..\..\..\lib\Mvc1\System.Web.Mvc.dll - - - False - ..\..\lib\System.Web.Routing.dll - 3.5 - - - - - Properties\SharedAssemblyInfo.cs - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs b/mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs deleted file mode 100644 index dde7e82..0000000 --- a/mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs +++ /dev/null @@ -1,65 +0,0 @@ -// -// Authors: Nate Kohari , Josh Close -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System.Linq; - using System.Web.Mvc; - - /// - /// An that injects filters with dependencies. - /// - public class NinjectActionInvoker : ControllerActionInvoker - { - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - public NinjectActionInvoker(IKernel kernel) - { - this.Kernel = kernel; - } - - /// - /// Gets the kernel. - /// - public IKernel Kernel { get; private set; } - - /// - /// Gets the filters for the specified request and action. - /// - /// The controller context. - /// The action descriptor. - /// The filters. - protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) - { - FilterInfo filterInfo = base.GetFilters(controllerContext, actionDescriptor); - foreach (IActionFilter filter in filterInfo.ActionFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - foreach (IAuthorizationFilter filter in filterInfo.AuthorizationFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - foreach (IExceptionFilter filter in filterInfo.ExceptionFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - foreach (IResultFilter filter in filterInfo.ResultFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - return filterInfo; - } - } -} \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs.orig b/mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs.orig deleted file mode 100644 index dde7e82..0000000 --- a/mvc1/src/Ninject.Web.Mvc/NinjectActionInvoker.cs.orig +++ /dev/null @@ -1,65 +0,0 @@ -// -// Authors: Nate Kohari , Josh Close -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System.Linq; - using System.Web.Mvc; - - /// - /// An that injects filters with dependencies. - /// - public class NinjectActionInvoker : ControllerActionInvoker - { - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - public NinjectActionInvoker(IKernel kernel) - { - this.Kernel = kernel; - } - - /// - /// Gets the kernel. - /// - public IKernel Kernel { get; private set; } - - /// - /// Gets the filters for the specified request and action. - /// - /// The controller context. - /// The action descriptor. - /// The filters. - protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) - { - FilterInfo filterInfo = base.GetFilters(controllerContext, actionDescriptor); - foreach (IActionFilter filter in filterInfo.ActionFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - foreach (IAuthorizationFilter filter in filterInfo.AuthorizationFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - foreach (IExceptionFilter filter in filterInfo.ExceptionFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - foreach (IResultFilter filter in filterInfo.ResultFilters.Where(f => f != null)) - { - this.Kernel.Inject(filter); - } - - return filterInfo; - } - } -} \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc/NinjectControllerFactory.cs b/mvc1/src/Ninject.Web.Mvc/NinjectControllerFactory.cs deleted file mode 100644 index 7414443..0000000 --- a/mvc1/src/Ninject.Web.Mvc/NinjectControllerFactory.cs +++ /dev/null @@ -1,66 +0,0 @@ -// -// Authors: Nate Kohari , Josh Close -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System; - using System.Web.Mvc; - - /// - /// A controller factory that creates s via Ninject. - /// - public class NinjectControllerFactory : DefaultControllerFactory - { - /// - /// Initializes a new instance of the class. - /// - /// The kernel that should be used to create controllers. - public NinjectControllerFactory(IKernel kernel) - { - this.Kernel = kernel; - } - - /// - /// Gets the kernel that will be used to create controllers. - /// - public IKernel Kernel { get; private set; } - - /// - /// Gets a controller instance of type controllerType. - /// - /// Type of controller to create. - /// The controller instance. - protected override IController GetControllerInstance(Type controllerType) - { - var controller = this.Kernel.Get(controllerType) as IController; - - if (controller == null) - { - return base.GetControllerInstance(controllerType); - } - - var standardController = controller as Controller; - - if (standardController != null) - { - standardController.ActionInvoker = this.CreateActionInvoker(); - } - - return controller; - } - - /// - /// Creates the action invoker. - /// - /// The action invoker. - protected virtual NinjectActionInvoker CreateActionInvoker() - { - return new NinjectActionInvoker(this.Kernel); - } - } -} \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs b/mvc1/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs deleted file mode 100644 index b852df9..0000000 --- a/mvc1/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs +++ /dev/null @@ -1,82 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2011 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc -{ - using System.Web; - using System.Web.Mvc; - - using Ninject.Activation; - using Ninject.Components; - using Ninject.Web.Common; - - /// - /// The web plugin implementation for MVC - /// - public class NinjectMvcHttpApplicationPlugin : NinjectComponent, INinjectHttpApplicationPlugin - { - /// - /// The kernel - /// - private readonly IKernel kernel; - - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - public NinjectMvcHttpApplicationPlugin(IKernel kernel) - { - this.kernel = kernel; - } - - /// - /// Gets the request scope. - /// - /// The context. - /// The request scope. - public object GetRequestScope(IContext context) - { - return HttpContext.Current; - } - - /// - /// Starts this instance. - /// - public void Start() - { - ControllerBuilder.Current.SetControllerFactory(this.CreateControllerFactory()); - } - - /// - /// Stops this instance. - /// - public void Stop() - { - } - - /// - /// Creates the controller factory that is used to create the controllers. - /// - /// The created controller factory. - protected virtual NinjectControllerFactory CreateControllerFactory() - { - return new NinjectControllerFactory(this.kernel); - } - } -} \ No newline at end of file diff --git a/mvc1/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs b/mvc1/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs deleted file mode 100644 index 3d5d857..0000000 --- a/mvc1/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,26 +0,0 @@ -#region License -// Author: Nate Kohari -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#endregion -#region Using Directives -using System.Reflection; -using System.Security; -#endregion - -[assembly: AssemblyDescriptionAttribute("Extension for Ninject providing integration with ASP.NET MVC1")] - -#if !NO_PARTIAL_TRUST -[assembly: AllowPartiallyTrustedCallers] -#endif \ No newline at end of file diff --git a/mvc1/src/SampleApplication/Content/Site.css b/mvc1/src/SampleApplication/Content/Site.css deleted file mode 100644 index 59aeb2e..0000000 --- a/mvc1/src/SampleApplication/Content/Site.css +++ /dev/null @@ -1,317 +0,0 @@ -/*---------------------------------------------------------- -The base color for this template is #5c87b2. If you'd like -to use a different color start by replacing all instances of -#5c87b2 with your new color. -----------------------------------------------------------*/ -body -{ - background-color: #5c87b2; - font-size: .75em; - font-family: Verdana, Helvetica, Sans-Serif; - margin: 0; - padding: 0; - color: #696969; -} - -a:link -{ - color: #034af3; - text-decoration: underline; -} -a:visited -{ - color: #505abc; -} -a:hover -{ - color: #1d60ff; - text-decoration: none; -} -a:active -{ - color: #12eb87; -} - -p, ul -{ - margin-bottom: 20px; - line-height: 1.6em; -} - -/* HEADINGS -----------------------------------------------------------*/ -h1, h2, h3, h4, h5, h6 -{ - font-size: 1.5em; - color: #000; - font-family: Arial, Helvetica, sans-serif; -} - -h1 -{ - font-size: 2em; - padding-bottom: 0; - margin-bottom: 0; -} -h2 -{ - padding: 0 0 10px 0; -} -h3 -{ - font-size: 1.2em; -} -h4 -{ - font-size: 1.1em; -} -h5, h6 -{ - font-size: 1em; -} - -/* this rule styles

    tags that are the -first child of the left and right table columns */ -.rightColumn > h1, .rightColumn > h2, .leftColumn > h1, .leftColumn > h2 -{ - margin-top: 0; -} - -/* 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 -{ - position: relative; - margin-bottom: 0px; - color: #000; - padding: 0; -} - -#header h1 -{ - font-weight: bold; - padding: 5px 0; - margin: 0; - color: #fff; - border: none; - line-height: 2em; - font-family: Arial, Helvetica, sans-serif; - font-size: 32px !important; -} - -#main -{ - padding: 30px 30px 15px 30px; - background-color: #fff; - margin-bottom: 30px; - _height: 1px; /* only IE6 applies CSS properties starting with an underscrore */ -} - -#footer -{ - color: #999; - padding: 10px 0; - text-align: center; - line-height: normal; - margin: 0; - font-size: .9em; -} - -/* TAB MENU -----------------------------------------------------------*/ -ul#menu -{ - border-bottom: 1px #5C87B2 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: #e8eef4; - color: #034af3; -} - -ul#menu li a:hover -{ - background-color: #fff; - text-decoration: none; -} - -ul#menu li a:active -{ - background-color: #a6e2a6; - text-decoration: none; -} - -ul#menu li.selected a -{ - background-color: #fff; - color: #000; -} - -/* FORM LAYOUT ELEMENTS -----------------------------------------------------------*/ - -fieldset -{ - margin: 1em 0; - padding: 1em; - border: 1px solid #CCC; -} - -fieldset p -{ - margin: 2px 12px 10px 10px; -} - -fieldset label -{ - display: block; -} - -fieldset label.inline -{ - display: inline; -} - -legend -{ - font-size: 1.1em; - font-weight: 600; - padding: 2px 4px 8px 4px; -} - -input[type="text"] -{ - width: 200px; - border: 1px solid #CCC; -} - -input[type="password"] -{ - width: 200px; - border: 1px solid #CCC; -} - -/* TABLE -----------------------------------------------------------*/ - -table -{ - border: solid 1px #e8eef4; - border-collapse: collapse; -} - -table td -{ - padding: 5px; - border: solid 1px #e8eef4; -} - -table th -{ - padding: 6px 5px; - text-align: left; - background-color: #e8eef4; - border: solid 1px #e8eef4; -} - -/* MISC -----------------------------------------------------------*/ -.clear -{ - clear: both; -} - -.error -{ - color:Red; -} - -#menucontainer -{ - margin-top:40px; -} - -div#title -{ - display:block; - float:left; - text-align:left; -} - -#logindisplay -{ - font-size:1.1em; - display:block; - text-align:right; - margin:10px; - color:White; -} - -#logindisplay a:link -{ - color: white; - text-decoration: underline; -} - -#logindisplay a:visited -{ - color: white; - text-decoration: underline; -} - -#logindisplay a:hover -{ - color: white; - text-decoration: none; -} - -.field-validation-error -{ - color: #ff0000; -} - -.input-validation-error -{ - border: 1px solid #ff0000; - background-color: #ffeeee; -} - -.validation-summary-errors -{ - font-weight: bold; - color: #ff0000; -} diff --git a/mvc1/src/SampleApplication/Controllers/AccountController.cs b/mvc1/src/SampleApplication/Controllers/AccountController.cs deleted file mode 100644 index bcacd5e..0000000 --- a/mvc1/src/SampleApplication/Controllers/AccountController.cs +++ /dev/null @@ -1,364 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - using System; - using System.Globalization; - using System.Security.Principal; - using System.Web.Mvc; - using System.Web.Security; - - using SampleApplication.Services.Account; - - /// - /// The account controller. - /// - [HandleError] - public class AccountController : Controller - { - /// - /// Initializes a new instance of the class. - /// - /// The forms authentication service. - /// The membership service. - public AccountController( - IFormsAuthenticationService formsAuthenticationService, - IMembershipService membershipService) - { - this.MembershipService = membershipService; - this.FormsAuthenticationService = formsAuthenticationService; - } - - /// - /// Gets the forms authentication service. - /// - public IFormsAuthenticationService FormsAuthenticationService { get; private set; } - - /// - /// Gets the membership service. - /// - public IMembershipService MembershipService { get; private set; } - - /// - /// The log on action - /// - /// The log on view. - public ActionResult LogOn() - { - return View(); - } - - /// - /// Handles the log on request. - /// - /// Name of the user. - /// The password. - /// if set to true the user is remembered. - /// The return URL. - /// - /// The home view in case of success. The log on view otherwise. - /// - [AcceptVerbs(HttpVerbs.Post)] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", - Justification = "Needs to take same parameter type as Controller.Redirect()")] - public ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl) - { - if (!this.ValidateLogOn(userName, password)) - { - return View(); - } - - this.FormsAuthenticationService.SignIn(userName, rememberMe); - if (!String.IsNullOrEmpty(returnUrl)) - { - return Redirect(returnUrl); - } - - return RedirectToAction("Index", "Home"); - } - - /// - /// The log of action handler. - /// - /// Redirect to the home view. - public ActionResult LogOff() - { - this.FormsAuthenticationService.SignOut(); - - return RedirectToAction("Index", "Home"); - } - - /// - /// Handler for the register action. - /// - /// The register view. - public ActionResult Register() - { - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - return View(); - } - - /// - /// Handles the register request. - /// - /// Name of the user. - /// The email. - /// The password. - /// The password confirmation. - /// - /// The home view in case of success. The register view otherwise. - /// - [AcceptVerbs(HttpVerbs.Post)] - public ActionResult Register(string userName, string email, string password, string confirmPassword) - { - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - - if (this.ValidateRegistration(userName, email, password, confirmPassword)) - { - // Attempt to register the user - MembershipCreateStatus createStatus = this.MembershipService.CreateUser(userName, password, email); - - if (createStatus == MembershipCreateStatus.Success) - { - this.FormsAuthenticationService.SignIn(userName, false /* createPersistentCookie */); - return RedirectToAction("Index", "Home"); - } - - ModelState.AddModelError("_FORM", ErrorCodeToString(createStatus)); - } - - // If we got this far, something failed, redisplay form - return View(); - } - - /// - /// Handler for the change password action. - /// - /// The change password view. - [Authorize] - public ActionResult ChangePassword() - { - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - return View(); - } - - /// - /// Handler for the change password post request. - /// - /// The current password. - /// The new password. - /// The password confirmation. - /// - /// The change password success view in case of success. The change password view otherwise. - /// - [Authorize] - [AcceptVerbs(HttpVerbs.Post)] - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes", - Justification = "Exceptions result in password not being changed.")] - public ActionResult ChangePassword(string currentPassword, string newPassword, string confirmPassword) - { - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - - if (!this.ValidateChangePassword(currentPassword, newPassword, confirmPassword)) - { - return View(); - } - - try - { - if (this.MembershipService.ChangePassword(this.User.Identity.Name, currentPassword, newPassword)) - { - return RedirectToAction("ChangePasswordSuccess"); - } - - ModelState.AddModelError("_FORM", "The current password is incorrect or the new password is invalid."); - return View(); - } - catch - { - ModelState.AddModelError("_FORM", "The current password is incorrect or the new password is invalid."); - return View(); - } - } - - /// - /// Handles the change password success action - /// - /// The change password success view. - public ActionResult ChangePasswordSuccess() - { - return View(); - } - - /// - /// Method called before the action method is invoked. - /// - /// Contains information about the current request and action. - /// Windows authentication is not supported. - protected override void OnActionExecuting(ActionExecutingContext filterContext) - { - if (filterContext.HttpContext.User.Identity is WindowsIdentity) - { - throw new InvalidOperationException("Windows authentication is not supported."); - } - } - - /// - /// Validates the change password data. - /// - /// The current password. - /// The new password. - /// The confirm password. - /// True if the change password data is valid. Otherwise false. - private bool ValidateChangePassword(string currentPassword, string newPassword, string confirmPassword) - { - if (String.IsNullOrEmpty(currentPassword)) - { - ModelState.AddModelError("currentPassword", "You must specify a current password."); - } - - if (newPassword == null || newPassword.Length < this.MembershipService.MinPasswordLength) - { - string errorMessage = String.Format( - CultureInfo.CurrentCulture, - "You must specify a new password of {0} or more characters.", - this.MembershipService.MinPasswordLength); - ModelState.AddModelError( - "newPassword", - errorMessage); - } - - if (!String.Equals(newPassword, confirmPassword, StringComparison.Ordinal)) - { - ModelState.AddModelError("_FORM", "The new password and confirmation password do not match."); - } - - return ModelState.IsValid; - } - - /// - /// Validates the log on data. - /// - /// Name of the user. - /// The password. - /// True if the log on data is valid. Otherwise false. - private bool ValidateLogOn(string userName, string password) - { - if (String.IsNullOrEmpty(userName)) - { - ModelState.AddModelError("username", "You must specify a username."); - } - - if (String.IsNullOrEmpty(password)) - { - ModelState.AddModelError("password", "You must specify a password."); - } - - if (!this.MembershipService.ValidateUser(userName, password)) - { - ModelState.AddModelError("_FORM", "The username or password provided is incorrect."); - } - - return ModelState.IsValid; - } - - /// - /// Validates the registration data. - /// - /// The name of the user. - /// The email. - /// The password. - /// The password confirmation. - /// True if the registration data is valid. Otherwise false. - private bool ValidateRegistration(string userName, string email, string password, string confirmPassword) - { - if (String.IsNullOrEmpty(userName)) - { - ModelState.AddModelError("username", "You must specify a username."); - } - - if (String.IsNullOrEmpty(email)) - { - ModelState.AddModelError("email", "You must specify an email address."); - } - - if (password == null || password.Length < this.MembershipService.MinPasswordLength) - { - string errorMessage = String.Format( - CultureInfo.CurrentCulture, - "You must specify a password of {0} or more characters.", - this.MembershipService.MinPasswordLength); - ModelState.AddModelError( - "password", - errorMessage); - } - - if (!String.Equals(password, confirmPassword, StringComparison.Ordinal)) - { - ModelState.AddModelError("_FORM", "The new password and confirmation password do not match."); - } - - return ModelState.IsValid; - } - - /// - /// Converts the error code to the error string. - /// - /// The create status. - /// The error message. - private static string ErrorCodeToString(MembershipCreateStatus createStatus) - { - // See http://msdn.microsoft.com/en-us/library/system.web.security.membershipcreatestatus.aspx for - // a full list of status codes. - switch (createStatus) - { - case MembershipCreateStatus.DuplicateUserName: - return "Username already exists. Please enter a different user name."; - - case MembershipCreateStatus.DuplicateEmail: - return "A username for that e-mail address already exists. Please enter a different e-mail address."; - - case MembershipCreateStatus.InvalidPassword: - return "The password provided is invalid. Please enter a valid password value."; - - case MembershipCreateStatus.InvalidEmail: - return "The e-mail address provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.InvalidAnswer: - return "The password retrieval answer provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.InvalidQuestion: - return "The password retrieval question provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.InvalidUserName: - return "The user name provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.ProviderError: - return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator."; - - case MembershipCreateStatus.UserRejected: - return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator."; - - default: - return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator."; - } - } - } -} diff --git a/mvc1/src/SampleApplication/Controllers/HomeController.cs b/mvc1/src/SampleApplication/Controllers/HomeController.cs deleted file mode 100644 index 4b16499..0000000 --- a/mvc1/src/SampleApplication/Controllers/HomeController.cs +++ /dev/null @@ -1,65 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - using System.Web.Mvc; - - /// - /// The home controller. - /// - [HandleError] - [LoggingFilter] - public class HomeController : Controller - { - /// - /// The data model of the home controller. - /// - private readonly IHomeControllerModel homeControllerModel; - - /// - /// Initializes a new instance of the class. - /// - /// The home controller model. - public HomeController(IHomeControllerModel homeControllerModel) - { - this.homeControllerModel = homeControllerModel; - } - - /// - /// The index action - /// - /// The view shown by the index action. - public ActionResult Index() - { - ViewData["Message"] = this.homeControllerModel.WelcomeMessage; - return View(); - } - - /// - /// The about action handler - /// - /// The view shown by the about action. - public ActionResult About() - { - return View(); - } - } -} - diff --git a/mvc1/src/SampleApplication/Controllers/HomeControllerModel.cs b/mvc1/src/SampleApplication/Controllers/HomeControllerModel.cs deleted file mode 100644 index 811ad01..0000000 --- a/mvc1/src/SampleApplication/Controllers/HomeControllerModel.cs +++ /dev/null @@ -1,39 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - /// - /// The data model of the home controller - /// - public class HomeControllerModel : IHomeControllerModel - { - /// - /// Gets the welcome message. - /// - /// The welcome message. - public string WelcomeMessage - { - get - { - return "Welcome to MVC. From Home Controller Model."; - } - } - } -} \ No newline at end of file diff --git a/mvc1/src/SampleApplication/Controllers/IHomeControllerModel.cs b/mvc1/src/SampleApplication/Controllers/IHomeControllerModel.cs deleted file mode 100644 index fd81eef..0000000 --- a/mvc1/src/SampleApplication/Controllers/IHomeControllerModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - /// - /// The data model of the home controller - /// - public interface IHomeControllerModel - { - /// - /// Gets the welcome message. - /// - /// The welcome message. - string WelcomeMessage { get; } - } -} \ No newline at end of file diff --git a/mvc1/src/SampleApplication/Controllers/LoggingFilterAttribute.cs b/mvc1/src/SampleApplication/Controllers/LoggingFilterAttribute.cs deleted file mode 100644 index b170c96..0000000 --- a/mvc1/src/SampleApplication/Controllers/LoggingFilterAttribute.cs +++ /dev/null @@ -1,57 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - using System.Globalization; - using System.Web.Mvc; - using log4net; - using Ninject; - - /// - /// Filter attribute that logs the action. - /// - public class LoggingFilterAttribute : ActionFilterAttribute - { - /// - /// Gets or sets the logger that is used to log. - /// - /// The logger that is used to log. - [Inject] - public ILog Log { get; set; } - - /// - /// Called by the MVC framework before the action method executes. - /// - /// The filter context. - public override void OnActionExecuting(ActionExecutingContext filterContext) - { - this.Log.Info(string.Format(CultureInfo.InvariantCulture, "Executing: {0}", filterContext.ActionDescriptor.ActionName)); - } - - /// - /// Called by the MVC framework after the action method executes. - /// - /// The filter context. - public override void OnActionExecuted(ActionExecutedContext filterContext) - { - this.Log.Info(string.Format(CultureInfo.InvariantCulture, "Executed: {0}", filterContext.ActionDescriptor.ActionName)); - } - } -} \ No newline at end of file diff --git a/mvc1/src/SampleApplication/Default.aspx b/mvc1/src/SampleApplication/Default.aspx deleted file mode 100644 index e3e39e4..0000000 --- a/mvc1/src/SampleApplication/Default.aspx +++ /dev/null @@ -1,3 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="SampleApplication._Default" %> - -<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%> diff --git a/mvc1/src/SampleApplication/Default.aspx.cs b/mvc1/src/SampleApplication/Default.aspx.cs deleted file mode 100644 index 9b1af3b..0000000 --- a/mvc1/src/SampleApplication/Default.aspx.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System.Web; -using System.Web.Mvc; -using System.Web.UI; - -namespace SampleApplication -{ - public partial class _Default : Page - { - public void Page_Load(object sender, System.EventArgs e) - { - // Change the current path so that the Routing handler can correctly interpret - // the request, then restore the original path so that the OutputCache module - // can correctly process the response (if caching is enabled). - - string originalPath = Request.Path; - HttpContext.Current.RewritePath(Request.ApplicationPath, false); - IHttpHandler httpHandler = new MvcHttpHandler(); - httpHandler.ProcessRequest(HttpContext.Current); - HttpContext.Current.RewritePath(originalPath, false); - } - } -} diff --git a/mvc1/src/SampleApplication/Global.asax.cs b/mvc1/src/SampleApplication/Global.asax.cs deleted file mode 100644 index e787bc4..0000000 --- a/mvc1/src/SampleApplication/Global.asax.cs +++ /dev/null @@ -1,77 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication -{ - using System.Reflection; - using System.Threading; - using System.Web.Mvc; - using System.Web.Routing; - - using log4net; - - using Ninject; - using Ninject.Web.Common; - - using SampleApplication.Controllers; - - // Note: For instructions on enabling IIS6 or IIS7 classic mode, - // visit http://go.microsoft.com/?LinkId=9394801 - - /// - /// The application main class - /// - public class MvcApplication : NinjectHttpApplication - { - /// - /// Registers the routes. - /// - /// The routes. - public static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.MapRoute( - "Default", // Route name - "{controller}/{action}/{id}", // URL with parameters - new { controller = "Home", action = "Index", id = string.Empty }); // Parameter defaults - } - - /// - /// Called when the application is started. - /// - protected override void OnApplicationStarted() - { - RegisterRoutes(RouteTable.Routes); - } - - /// - /// Creates the kernel that will manage your application. - /// - /// The created kernel. - protected override IKernel CreateKernel() - { - var kernel = new StandardKernel(); - kernel.Bind().To(); - kernel.Bind().ToMethod(ctx => LogManager.GetLogger("xxx")); - kernel.Load(Assembly.GetExecutingAssembly()); - return kernel; - } - } -} \ No newline at end of file diff --git a/mvc1/src/SampleApplication/Properties/AssemblyInfo.cs b/mvc1/src/SampleApplication/Properties/AssemblyInfo.cs deleted file mode 100644 index 9877d1b..0000000 --- a/mvc1/src/SampleApplication/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,35 +0,0 @@ -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("SampleApplication")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("SampleApplication")] -[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("e2be9be1-73fc-49d9-b6bd-a84b499b5c86")] - -// 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")] diff --git a/mvc1/src/SampleApplication/SampleApplication.csproj b/mvc1/src/SampleApplication/SampleApplication.csproj deleted file mode 100644 index 23bf105..0000000 --- a/mvc1/src/SampleApplication/SampleApplication.csproj +++ /dev/null @@ -1,149 +0,0 @@ - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {C5DC91B9-C7F5-44AF-B26D-D4DEFB83B817} - {603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - SampleApplication - SampleApplication - v3.5 - false - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - False - ..\..\..\lib\log4net\net-3.5\log4net.dll - - - False - ..\..\..\lib\Ninject\net-3.5\Ninject.dll - - - False - ..\..\..\lib\Ninject.Web.Common\net-3.5\Ninject.Web.Common.dll - - - False - ..\..\build\debug\Ninject.Web.Mvc.dll - - - - - 3.5 - - - 3.5 - - - - 3.5 - - - - - - - - - - - - - - - - - - - - Default.aspx - ASPXCodeBehind - - - Global.asax - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - True - 63978 - / - - - False - False - - - False - - - - - \ No newline at end of file diff --git a/mvc1/src/SampleApplication/SampleApplication.sln b/mvc1/src/SampleApplication/SampleApplication.sln deleted file mode 100644 index 4c33a2c..0000000 --- a/mvc1/src/SampleApplication/SampleApplication.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SampleApplication", "SampleApplication.csproj", "{C5DC91B9-C7F5-44AF-B26D-D4DEFB83B817}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C5DC91B9-C7F5-44AF-B26D-D4DEFB83B817}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C5DC91B9-C7F5-44AF-B26D-D4DEFB83B817}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C5DC91B9-C7F5-44AF-B26D-D4DEFB83B817}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C5DC91B9-C7F5-44AF-B26D-D4DEFB83B817}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/mvc1/src/SampleApplication/Scripts/MicrosoftAjax.debug.js b/mvc1/src/SampleApplication/Scripts/MicrosoftAjax.debug.js deleted file mode 100644 index 7b7de62..0000000 --- a/mvc1/src/SampleApplication/Scripts/MicrosoftAjax.debug.js +++ /dev/null @@ -1,6850 +0,0 @@ -// Name: MicrosoftAjax.debug.js -// Assembly: System.Web.Extensions -// Version: 3.5.0.0 -// FileVersion: 3.5.30729.1 -//----------------------------------------------------------------------- -// 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() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); -} -Function._validateParams = function Function$_validateParams(params, expectedParams) { - var e; - e = Function._validateParameterCount(params, expectedParams); - if (e) { - e.popStackFrame(); - return e; - } - for (var i=0; i < params.length; i++) { - var expectedParam = expectedParams[Math.min(i, expectedParams.length - 1)]; - var paramName = expectedParam.name; - if (expectedParam.parameterArray) { - paramName += "[" + (i - expectedParams.length + 1) + "]"; - } - e = Function._validateParameter(params[i], expectedParam, paramName); - if (e) { - e.popStackFrame(); - return e; - } - } - return null; -} -Function._validateParameterCount = function Function$_validateParameterCount(params, expectedParams) { - var maxParams = expectedParams.length; - var minParams = 0; - for (var i=0; i < expectedParams.length; i++) { - if (expectedParams[i].parameterArray) { - maxParams = Number.MAX_VALUE; - } - else if (!expectedParams[i].optional) { - minParams++; - } - } - if (params.length < minParams || params.length > maxParams) { - var e = Error.parameterCount(); - e.popStackFrame(); - return e; - } - return null; -} -Function._validateParameter = function Function$_validateParameter(param, expectedParam, paramName) { - var e; - var expectedType = expectedParam.type; - var expectedInteger = !!expectedParam.integer; - var expectedDomElement = !!expectedParam.domElement; - var mayBeNull = !!expectedParam.mayBeNull; - e = Function._validateParameterType(param, expectedType, expectedInteger, expectedDomElement, mayBeNull, paramName); - if (e) { - e.popStackFrame(); - return e; - } - var expectedElementType = expectedParam.elementType; - var elementMayBeNull = !!expectedParam.elementMayBeNull; - if (expectedType === Array && typeof(param) !== "undefined" && param !== null && - (expectedElementType || !elementMayBeNull)) { - var expectedElementInteger = !!expectedParam.elementInteger; - var 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; - 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 (var i in values) { - if (values[i] === param) return null; - } - } - else { - var v = param; - for (var 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) { - var val; - if (typeof(param.nodeType) !== 'number') { - var doc = param.ownerDocument || param.document || param; - if (doc != param) { - var w = doc.defaultView || doc.parentWindow; - val = (w != param) && !(w.document && param.document && (w.document === param.document)); - } - else { - val = (typeof(doc.body) === 'undefined'); - } - } - else { - val = (param.nodeType === 3); - } - if (val) { - e = Error.argument(paramName, Sys.Res.argumentDomElement); - e.popStackFrame(); - return e; - } - } - if (expectedType && !expectedType.isInstanceOfType(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 e = new Error(message); - e.message = message; - if (errorInfo) { - for (var v in errorInfo) { - e[v] = errorInfo[v]; - } - } - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, { name: "Sys.ArgumentException", paramName: paramName }); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, { name: "Sys.ArgumentNullException", paramName: paramName }); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, { - name: "Sys.ArgumentOutOfRangeException", - paramName: paramName, - actualValue: actualValue - }); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, { - name: "Sys.ArgumentTypeException", - paramName: paramName, - actualType: actualType, - expectedType: expectedType - }); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, { name: "Sys.ArgumentUndefinedException", paramName: paramName }); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, {name: 'Sys.FormatException'}); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, {name: 'Sys.InvalidOperationException'}); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, {name: 'Sys.NotImplementedException'}); - e.popStackFrame(); - return e; -} -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 e = Error.create(displayMessage, {name: 'Sys.ParameterCountException'}); - e.popStackFrame(); - return e; -} -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.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); -} -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} - ]); - 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; -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"; - } - if (format.length === 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.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); - } - } - return format; -} -Date._expandYear = function Date$_expandYear(dtf, year) { - if (year < 100) { - var curr = new Date().getFullYear(); - year += curr - (curr % 100); - if (year > dtf.Calendar.TwoDigitYearMax) { - return year - 100; - } - } - 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': - 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; - } - 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/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 custom = false; - for (var i = 1, il = args.length; i < il; i++) { - var format = args[i]; - if (format) { - custom = true; - var date = Date._parseExact(value, format, cultureInfo); - if (date) return date; - } - } - if (! custom) { - var formats = cultureInfo._getDateTimeFormats(); - for (var i = 0, il = formats.length; i < il; i++) { - var 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; - var parseInfo = Date._getParseRegExp(dtf, format); - var match = new RegExp(parseInfo.regExp).exec(value); - if (match === null) return null; - - var groups = parseInfo.groups; - var year = null, month = null, date = null, weekDay = null; - var hour = 0, min = 0, sec = 0, msec = 0, tzMinOffset = null; - var 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': - var 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; - var 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': - var hourOffset = parseInt(matchGroup, 10); - if ((hourOffset < -12) || (hourOffset > 13)) return null; - tzMinOffset = hourOffset * 60; - break; - } - } - } - var result = new Date(); - if (year === null) { - year = result.getFullYear(); - } - if (month === null) { - month = result.getMonth(); - } - if (date === null) { - date = result.getDate(); - } - 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) { - if (!format || (format.length === 0) || (format === 'i')) { - if (cultureInfo && (cultureInfo.name.length > 0)) { - return this.toLocaleString(); - } - else { - return this.toString(); - } - } - var dtf = cultureInfo.dateTimeFormat; - 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(); - } - var quoteCount = 0; - var tokenRegExp = Date._getTokenRegExp(); - 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; - } - switch (ar[0]) { - case "dddd": - ret.append(dtf.DayNames[this.getDay()]); - break; - case "ddd": - ret.append(dtf.AbbreviatedDayNames[this.getDay()]); - break; - case "dd": - ret.append(addLeadingZero(this.getDate())); - break; - case "d": - ret.append(this.getDate()); - break; - case "MMMM": - ret.append(dtf.MonthNames[this.getMonth()]); - break; - case "MMM": - ret.append(dtf.AbbreviatedMonthNames[this.getMonth()]); - break; - case "MM": - ret.append(addLeadingZero(this.getMonth() + 1)); - break; - case "M": - ret.append(this.getMonth() + 1); - break; - case "yyyy": - ret.append(this.getFullYear()); - break; - case "yy": - ret.append(addLeadingZero(this.getFullYear() % 100)); - break; - case "y": - ret.append(this.getFullYear() % 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))) + - dtf.TimeSeparator + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60))); - break; - } - } - return ret.toString(); -} - -Number.__typeName = 'Number'; -Number.__class = true; -Number.parseLocale = function Number$parseLocale(value) { - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "value", type: String} - ]); - 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} - ]); - 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; - } - 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) { - - 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 "-": - ret += nf.NegativeSign; - break; - case "%": - ret += nf.PercentSymbol; - break; - } - } - return ret; -} - -RegExp.__typeName = 'RegExp'; -RegExp.__class = true; - -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 (Array.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; - 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; -} -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 = Array.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); -} - -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 = this.getBaseMethod(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; - if (!this.isInstanceOfType(instance)) throw Error.argumentType('instance', Object.getType(instance), this); - var baseType = this.getBaseType(); - if (baseType) { - var baseMethod = baseType.prototype[name]; - return (baseMethod instanceof Function) ? baseMethod : null; - } - return null; -} -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 (!this.isInstanceOfType(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; - if (typeof(instance) === "undefined" || instance === null) return false; - if (instance instanceof this) return true; - var instanceType = Object.getType(instance); - return !!(instanceType === this) || - (instanceType.inheritsFrom && instanceType.inheritsFrom(this)) || - (instanceType.implementsInterface && instanceType.implementsInterface(this)); -} -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; - 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]; - if (ns && !ns.__namespace) { - throw Error.invalidOperation(String.format(Sys.Res.namespaceContainsObject, namespaceParts.splice(0, i + 1).join('.'))); - } - if (!ns) { - ns = rootObject[currentPart] = { - __namespace: true, - __typeName: namespaceParts.slice(0, i + 1).join('.') - }; - if (i === 0) { - Sys.__rootNamespaces[Sys.__rootNamespaces.length] = ns; - } - 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; - } -} -window.Sys = { - __namespace: true, - __typeName: "Sys", - getName: function() {return "Sys";}, - __upperCaseTypes: {} -}; -Sys.__rootNamespaces = [Sys]; -Sys.__registeredTypes = {}; - -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'); - -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; - } -} - -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; -} -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 i in this.prototype) { - var val = this.prototype[i]; - if (!Type.__identifierRegExp.test(i)) throw Error.invalidOperation(String.format(Sys.Res.enumInvalidValueName, i)); - if (typeof(val) !== 'number' || (val % 1) !== 0) throw Error.invalidOperation(Sys.Res.enumValueNotInteger); - if (typeof(this[i]) !== 'undefined') throw Error.invalidOperation(String.format(Sys.Res.enumReservedName, i)); - } - 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.EventHandlerList = function Sys$EventHandlerList() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - this._list = {}; -} - function Sys$EventHandlerList$addHandler(id, handler) { - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "id", type: String}, - {name: "handler", type: Function} - ]); - if (e) throw e; - Array.add(this._getEvent(id, true), handler); - } - function Sys$EventHandlerList$removeHandler(id, handler) { - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "id", type: String}, - {name: "handler", type: Function} - ]); - if (e) throw e; - var evt = this._getEvent(id); - if (!evt) return; - Array.remove(evt, 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, - removeHandler: Sys$EventHandlerList$removeHandler, - getHandler: Sys$EventHandlerList$getHandler, - _getEvent: Sys$EventHandlerList$_getEvent -} -Sys.EventHandlerList.registerClass('Sys.EventHandlerList'); - -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); - -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: "height", type: Number, integer: true}, - {name: "width", 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 e = eventObject; - var etype = this.type = e.type.toLowerCase(); - this.rawEvent = e; - this.altKey = e.altKey; - if (typeof(e.button) !== 'undefined') { - this.button = (typeof(e.which) !== 'undefined') ? e.button : - (e.button === 4) ? Sys.UI.MouseButton.middleButton : - (e.button === 2) ? Sys.UI.MouseButton.rightButton : - Sys.UI.MouseButton.leftButton; - } - if (etype === 'keypress') { - this.charCode = e.charCode || e.keyCode; - } - else if (e.keyCode && (e.keyCode === 46)) { - this.keyCode = 127; - } - else { - this.keyCode = e.keyCode; - } - this.clientX = e.clientX; - this.clientY = e.clientY; - this.ctrlKey = e.ctrlKey; - this.target = e.target ? e.target : e.srcElement; - if (!etype.startsWith('key')) { - if ((typeof(e.offsetX) !== 'undefined') && (typeof(e.offsetY) !== 'undefined')) { - this.offsetX = e.offsetX; - this.offsetY = e.offsetY; - } - else if (this.target && (this.target.nodeType !== 3) && (typeof(e.clientX) === 'number')) { - var loc = Sys.UI.DomElement.getLocation(this.target); - var w = Sys.UI.DomElement._getWindow(this.target); - this.offsetX = (w.pageXOffset || 0) + e.clientX - loc.x; - this.offsetY = (w.pageYOffset || 0) + e.clientY - loc.y; - } - } - this.screenX = e.screenX; - this.screenY = e.screenY; - this.shiftKey = e.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) { - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "element"}, - {name: "eventName", type: String}, - {name: "handler", type: Function} - ]); - 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}; -} -var $addHandlers = Sys.UI.DomEvent.addHandlers = function Sys$UI$DomEvent$addHandlers(element, events, handlerOwner) { - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "element"}, - {name: "events", type: Object}, - {name: "handlerOwner", 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); - } -} -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); - 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--) { - $removeHandler(element, name, handlers[i].handler); - } - } - element._events = null; - } -} -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._ensureDomNode(element); - var browserHandler = null; - if ((typeof(element._events) !== 'object') || (element._events == null)) 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; -} -switch(Sys.Browser.agent) { - case Sys.Browser.InternetExplorer: - 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; - var offsetX = clientRect.left - 2 + documentElement.scrollLeft, - offsetY = clientRect.top - 2 + documentElement.scrollTop; - - 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) { - } - - return new Sys.UI.Point(offsetX, offsetY); - } - break; - case 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; - var offsetY = 0; - var previous = null; - var previousStyle = null; - var currentStyle; - for (var 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; - } - } - currentStyle = Sys.UI.DomElement._getCurrentStyle(element); - var elementPosition = currentStyle ? currentStyle.position : null; - if (!elementPosition || (elementPosition !== "absolute")) { - for (var 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); - } - break; - case Sys.Browser.Opera: - 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; - var offsetY = 0; - var previous = null; - for (var parent = element; parent; previous = parent, parent = parent.offsetParent) { - var tagName = parent.tagName; - offsetX += parent.offsetLeft || 0; - offsetY += parent.offsetTop || 0; - } - var elementPosition = element.style.position; - var elementPositioned = elementPosition && (elementPosition !== "static"); - for (var parent = element.parentNode; parent; parent = parent.parentNode) { - tagName = parent.tagName ? parent.tagName.toUpperCase() : null; - if ((tagName !== "BODY") && (tagName !== "HTML") && (parent.scrollLeft || parent.scrollTop) && - ((elementPositioned && - ((parent.style.overflow === "scroll") || (parent.style.overflow === "auto"))))) { - offsetX -= (parent.scrollLeft || 0); - offsetY -= (parent.scrollTop || 0); - } - var parentPosition = (parent && parent.style) ? parent.style.position : null; - elementPositioned = elementPositioned || (parentPosition && (parentPosition !== "static")); - } - return new Sys.UI.Point(offsetX, offsetY); - } - break; - default: - 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; - var offsetY = 0; - var previous = null; - var previousStyle = null; - var currentStyle = null; - for (var 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 (var 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); - } - break; -} -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.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._ScriptLoader = function Sys$_ScriptLoader() { - this._scriptsToLoad = null; - this._sessions = []; - this._scriptLoadedDelegate = Function.createDelegate(this, this._scriptLoadedHandler); -} - function Sys$_ScriptLoader$dispose() { - this._stopSession(); - this._loading = false; - if(this._events) { - delete this._events; - } - this._sessions = null; - this._currentSession = null; - this._scriptLoadedDelegate = null; - } - function Sys$_ScriptLoader$loadScripts(scriptTimeout, allScriptsLoadedCallback, scriptLoadFailedCallback, scriptLoadTimeoutCallback) { - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "scriptTimeout", type: Number, integer: true}, - {name: "allScriptsLoadedCallback", type: Function, mayBeNull: true}, - {name: "scriptLoadFailedCallback", type: Function, mayBeNull: true}, - {name: "scriptLoadTimeoutCallback", type: Function, mayBeNull: true} - ]); - if (e) throw e; - var session = { - allScriptsLoadedCallback: allScriptsLoadedCallback, - scriptLoadFailedCallback: scriptLoadFailedCallback, - scriptLoadTimeoutCallback: scriptLoadTimeoutCallback, - scriptsToLoad: this._scriptsToLoad, - scriptTimeout: scriptTimeout }; - this._scriptsToLoad = null; - this._sessions[this._sessions.length] = session; - - if (!this._loading) { - this._nextSession(); - } - } - function Sys$_ScriptLoader$notifyScriptLoaded() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - - if(!this._loading) { - return; - } - this._currentTask._notified++; - - if(Sys.Browser.agent === Sys.Browser.Safari) { - if(this._currentTask._notified === 1) { - window.setTimeout(Function.createDelegate(this, function() { - this._scriptLoadedHandler(this._currentTask.get_scriptElement(), true); - }), 0); - } - } - } - function Sys$_ScriptLoader$queueCustomScriptTag(scriptAttributes) { - /// - /// - var e = Function._validateParams(arguments, [ - {name: "scriptAttributes"} - ]); - if (e) throw e; - if(!this._scriptsToLoad) { - this._scriptsToLoad = []; - } - Array.add(this._scriptsToLoad, scriptAttributes); - } - function Sys$_ScriptLoader$queueScriptBlock(scriptContent) { - /// - /// - var e = Function._validateParams(arguments, [ - {name: "scriptContent", type: String} - ]); - if (e) throw e; - if(!this._scriptsToLoad) { - this._scriptsToLoad = []; - } - Array.add(this._scriptsToLoad, {text: scriptContent}); - } - function Sys$_ScriptLoader$queueScriptReference(scriptUrl) { - /// - /// - var e = Function._validateParams(arguments, [ - {name: "scriptUrl", type: String} - ]); - if (e) throw e; - if(!this._scriptsToLoad) { - this._scriptsToLoad = []; - } - Array.add(this._scriptsToLoad, {src: scriptUrl}); - } - function Sys$_ScriptLoader$_createScriptElement(queuedScript) { - var scriptElement = document.createElement('script'); - scriptElement.type = 'text/javascript'; - for (var attr in queuedScript) { - scriptElement[attr] = queuedScript[attr]; - } - - return scriptElement; - } - function Sys$_ScriptLoader$_loadScriptsInternal() { - var session = this._currentSession; - if (session.scriptsToLoad && session.scriptsToLoad.length > 0) { - var nextScript = Array.dequeue(session.scriptsToLoad); - var scriptElement = this._createScriptElement(nextScript); - - if (scriptElement.text && Sys.Browser.agent === Sys.Browser.Safari) { - scriptElement.innerHTML = scriptElement.text; - delete scriptElement.text; - } - if (typeof(nextScript.src) === "string") { - this._currentTask = new Sys._ScriptLoaderTask(scriptElement, this._scriptLoadedDelegate); - this._currentTask.execute(); - } - else { - var headElements = document.getElementsByTagName('head'); - if (headElements.length === 0) { - throw new Error.invalidOperation(Sys.Res.scriptLoadFailedNoHead); - } - else { - headElements[0].appendChild(scriptElement); - } - - - Sys._ScriptLoader._clearScript(scriptElement); - this._loadScriptsInternal(); - } - } - else { - this._stopSession(); - var callback = session.allScriptsLoadedCallback; - if(callback) { - callback(this); - } - this._nextSession(); - } - } - function Sys$_ScriptLoader$_nextSession() { - if (this._sessions.length === 0) { - this._loading = false; - this._currentSession = null; - return; - } - this._loading = true; - - var session = Array.dequeue(this._sessions); - this._currentSession = session; - this._loadScriptsInternal(); - } - function Sys$_ScriptLoader$_raiseError(multipleCallbacks) { - var callback = this._currentSession.scriptLoadFailedCallback; - var scriptElement = this._currentTask.get_scriptElement(); - this._stopSession(); - - if(callback) { - callback(this, scriptElement, multipleCallbacks); - this._nextSession(); - } - else { - this._loading = false; - throw Sys._ScriptLoader._errorScriptLoadFailed(scriptElement.src, multipleCallbacks); - } - } - function Sys$_ScriptLoader$_scriptLoadedHandler(scriptElement, loaded) { - if(loaded && this._currentTask._notified) { - if(this._currentTask._notified > 1) { - this._raiseError(true); - } - else { - Array.add(Sys._ScriptLoader._getLoadedScripts(), scriptElement.src); - this._currentTask.dispose(); - this._currentTask = null; - this._loadScriptsInternal(); - } - } - else { - this._raiseError(false); - } - } - function Sys$_ScriptLoader$_scriptLoadTimeoutHandler() { - var callback = this._currentSession.scriptLoadTimeoutCallback; - this._stopSession(); - if(callback) { - callback(this); - } - this._nextSession(); - } - function Sys$_ScriptLoader$_stopSession() { - if(this._currentTask) { - this._currentTask.dispose(); - this._currentTask = null; - } - } -Sys._ScriptLoader.prototype = { - dispose: Sys$_ScriptLoader$dispose, - loadScripts: Sys$_ScriptLoader$loadScripts, - notifyScriptLoaded: Sys$_ScriptLoader$notifyScriptLoaded, - queueCustomScriptTag: Sys$_ScriptLoader$queueCustomScriptTag, - queueScriptBlock: Sys$_ScriptLoader$queueScriptBlock, - queueScriptReference: Sys$_ScriptLoader$queueScriptReference, - _createScriptElement: Sys$_ScriptLoader$_createScriptElement, - _loadScriptsInternal: Sys$_ScriptLoader$_loadScriptsInternal, - _nextSession: Sys$_ScriptLoader$_nextSession, - _raiseError: Sys$_ScriptLoader$_raiseError, - _scriptLoadedHandler: Sys$_ScriptLoader$_scriptLoadedHandler, - _scriptLoadTimeoutHandler: Sys$_ScriptLoader$_scriptLoadTimeoutHandler, - _stopSession: Sys$_ScriptLoader$_stopSession -} -Sys._ScriptLoader.registerClass('Sys._ScriptLoader', null, Sys.IDisposable); -Sys._ScriptLoader.getInstance = function Sys$_ScriptLoader$getInstance() { - var sl = Sys._ScriptLoader._activeInstance; - if(!sl) { - sl = Sys._ScriptLoader._activeInstance = new Sys._ScriptLoader(); - } - return sl; -} -Sys._ScriptLoader.isScriptLoaded = function Sys$_ScriptLoader$isScriptLoaded(scriptSrc) { - var dummyScript = document.createElement('script'); - dummyScript.src = scriptSrc; - return Array.contains(Sys._ScriptLoader._getLoadedScripts(), dummyScript.src); -} -Sys._ScriptLoader.readLoadedScripts = function Sys$_ScriptLoader$readLoadedScripts() { - if(!Sys._ScriptLoader._referencedScripts) { - var referencedScripts = Sys._ScriptLoader._referencedScripts = []; - var existingScripts = document.getElementsByTagName('script'); - for (i = existingScripts.length - 1; i >= 0; i--) { - var scriptNode = existingScripts[i]; - var scriptSrc = scriptNode.src; - if (scriptSrc.length) { - if (!Array.contains(referencedScripts, scriptSrc)) { - Array.add(referencedScripts, scriptSrc); - } - } - } - } -} -Sys._ScriptLoader._clearScript = function Sys$_ScriptLoader$_clearScript(scriptElement) { - if (!Sys.Debug.isDebug) { - scriptElement.parentNode.removeChild(scriptElement); - } -} -Sys._ScriptLoader._errorScriptLoadFailed = function Sys$_ScriptLoader$_errorScriptLoadFailed(scriptUrl, multipleCallbacks) { - var errorMessage; - if(multipleCallbacks) { - errorMessage = Sys.Res.scriptLoadMultipleCallbacks; - } - else { - errorMessage = Sys.Res.scriptLoadFailedDebug; - } - var displayMessage = "Sys.ScriptLoadFailedException: " + String.format(errorMessage, scriptUrl); - var e = Error.create(displayMessage, {name: 'Sys.ScriptLoadFailedException', 'scriptUrl': scriptUrl }); - e.popStackFrame(); - return e; -} -Sys._ScriptLoader._getLoadedScripts = function Sys$_ScriptLoader$_getLoadedScripts() { - if(!Sys._ScriptLoader._referencedScripts) { - Sys._ScriptLoader._referencedScripts = []; - Sys._ScriptLoader.readLoadedScripts(); - } - return Sys._ScriptLoader._referencedScripts; -} - -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; - this._notified = 0; -} - 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._ScriptLoader._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; - } - - var _this = this; - window.setTimeout(function() { - _this._completedCallback(scriptElement, true); - }, 0); - } -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.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.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 = function Sys$_Application() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - Sys._Application.initializeBase(this); - this._disposableObjects = []; - this._components = {}; - this._createdComponents = []; - this._secondPassComponents = []; - this._appLoadHandler = null; - this._beginRequestHandler = null; - this._clientId = null; - this._currentEntry = ''; - this._endRequestHandler = null; - this._history = null; - this._enableHistory = false; - this._historyEnabledInScriptManager = false; - this._historyFrame = null; - this._historyInitialized = false; - this._historyInitialLength = 0; - this._historyLength = 0; - this._historyPointIsNew = false; - this._ignoreTimer = false; - this._initialState = null; - this._state = {}; - this._timerCookie = 0; - this._timerHandler = null; - this._uniqueId = null; - this._unloadHandlerDelegate = Function.createDelegate(this, this._unloadHandler); - this._loadHandlerDelegate = Function.createDelegate(this, this._loadHandler); - Sys.UI.DomEvent.addHandler(window, "unload", this._unloadHandlerDelegate); - Sys.UI.DomEvent.addHandler(window, "load", this._loadHandlerDelegate); -} - function Sys$_Application$get_isCreatingComponents() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._creatingComponents; - } - function Sys$_Application$get_stateString() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - var hash = window.location.hash; - if (this._isSafari2()) { - var history = this._getHistory(); - if (history) { - hash = history[window.history.length - this._historyInitialLength]; - } - } - if ((hash.length > 0) && (hash.charAt(0) === '#')) { - hash = hash.substring(1); - } - if (Sys.Browser.agent === Sys.Browser.Firefox) { - hash = this._serializeState(this._deserializeState(hash, true)); - } - return hash; - } - function Sys$_Application$get_enableHistory() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._enableHistory; - } - function Sys$_Application$set_enableHistory(value) { - var e = Function._validateParams(arguments, [{name: "value", type: Boolean}]); - if (e) throw e; - 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; - } - 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_navigate(handler) { - /// - var e = Function._validateParams(arguments, [{name: "handler", type: Function}]); - if (e) throw e; - this.get_events().addHandler("navigate", handler); - } - 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); - } - 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$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(); - } - 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++) { - disposableObjects[i].dispose(); - } - Array.clear(this._disposableObjects); - Sys.UI.DomEvent.removeHandler(window, "unload", this._unloadHandlerDelegate); - if(this._loadHandlerDelegate) { - Sys.UI.DomEvent.removeHandler(window, "load", this._loadHandlerDelegate); - this._loadHandlerDelegate = null; - } - var sl = Sys._ScriptLoader.getInstance(); - if(sl) { - sl.dispose(); - } - Sys._Application.callBaseMethod(this, 'dispose'); - } - } - 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._initialized && !this._initializing) { - this._initializing = true; - window.setTimeout(Function.createDelegate(this, this._doInitialize), 0); - } - } - function Sys$_Application$notifyScriptLoaded() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - var sl = Sys._ScriptLoader.getInstance(); - if(sl) { - sl.notifyScriptLoaded(); - } - } - function Sys$_Application$registerDisposableObject(object) { - /// - /// - var e = Function._validateParams(arguments, [ - {name: "object", type: Sys.IDisposable} - ]); - if (e) throw e; - if (!this._disposing) { - this._disposableObjects[this._disposableObjects.length] = object; - } - } - 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._initializing); - 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$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; - } - 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); - } - function Sys$_Application$unregisterDisposableObject(object) { - /// - /// - var e = Function._validateParams(arguments, [ - {name: "object", type: Sys.IDisposable} - ]); - if (e) throw e; - if (!this._disposing) { - Array.remove(this._disposableObjects, object); - } - } - function Sys$_Application$_addComponentToSecondPass(component, references) { - this._secondPassComponents[this._secondPassComponents.length] = {component: component, references: references}; - } - function Sys$_Application$_deserializeState(entry, skipDecodeUri) { - 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] = skipDecodeUri ? value : decodeURIComponent(value); - } - } - return result; - } - function Sys$_Application$_doInitialize() { - Sys._Application.callBaseMethod(this, 'initialize'); - - var handler = this.get_events().getHandler("init"); - if (handler) { - this.beginCreateComponents(); - handler(this, Sys.EventArgs.Empty); - this.endCreateComponents(); - } - if (Sys.WebForms) { - 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); - } - - this.raiseLoad(); - this._initializing = false; - } - function Sys$_Application$_enableHistoryInScriptManager() { - this._enableHistory = true; - this._historyEnabledInScriptManager = true; - } - 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; - } - if (this._isSafari2()) { - var historyElement = document.getElementById('__history'); - if (!historyElement) throw Error.invalidOperation(Sys.Res.historyMissingHiddenInput); - this._setHistory([window.location.hash]); - this._historyInitialLength = window.history.length; - } - - 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; - } - } - function Sys$_Application$_getHistory() { - var historyElement = document.getElementById('__history'); - if (!historyElement) return ''; - var v = historyElement.value; - return v ? Sys.Serialization.JavaScriptSerializer.deserialize(v, true) : ''; - } - function Sys$_Application$_isSafari2() { - return (Sys.Browser.agent === Sys.Browser.Safari) && - (Sys.Browser.version <= 419.3); - } - function Sys$_Application$_loadHandler() { - if(this._loadHandlerDelegate) { - Sys.UI.DomEvent.removeHandler(window, "load", this._loadHandlerDelegate); - this._loadHandlerDelegate = null; - } - this.initialize(); - } - 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(); - } - 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); - this._historyLength = window.history.length; - } - } - else { - this._ignoreTimer = false; - } - this._timerCookie = window.setTimeout(this._timerHandler, 100); - } - function Sys$_Application$_onIFrameLoad(entry) { - this._ensureHistory(); - if (!this._ignoreIFrame) { - this._historyPointIsNew = false; - this._navigate(entry); - } - this._ignoreIFrame = false; - } - function Sys$_Application$_onPageRequestManagerBeginRequest(sender, args) { - this._ignoreTimer = true; - } - 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(); - } - } - 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); - } - } - 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 : ''); - } - function Sys$_Application$_setHistory(historyArray) { - var historyElement = document.getElementById('__history'); - if (historyElement) { - historyElement.value = Sys.Serialization.JavaScriptSerializer.serialize(historyArray); - } - } - function Sys$_Application$_setState(entry, title) { - 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; - this._historyPointIsNew = false; - var frameDoc = this._historyFrame.contentWindow.document; - frameDoc.open("javascript:''"); - frameDoc.write("" + (title || document.title) + - "parent.Sys.Application._onIFrameLoad('" + - entry + "');"); - frameDoc.close(); - } - this._ignoreTimer = false; - var currentHash = this.get_stateString(); - this._currentEntry = entry; - if (entry !== currentHash) { - var loc = document.location; - if (loc.href.length - loc.hash.length + entry.length > 1024) { - throw Error.invalidOperation(Sys.Res.urlMustBeLessThan1024chars); - } - if (this._isSafari2()) { - var history = this._getHistory(); - history[window.history.length - this._historyInitialLength + 1] = entry; - this._setHistory(history); - this._historyLength = window.history.length + 1; - var form = document.createElement('form'); - form.method = 'get'; - form.action = '#' + entry; - document.appendChild(form); - form.submit(); - document.removeChild(form); - } - else { - window.location.hash = entry; - } - if ((typeof(title) !== 'undefined') && (title !== null)) { - document.title = title; - } - } - } - } - function Sys$_Application$_unloadHandler(event) { - this.dispose(); - } - function Sys$_Application$_updateHiddenField(value) { - if (this._clientId) { - var serverStateField = document.getElementById(this._clientId); - if (serverStateField) { - serverStateField.value = value; - } - } - } -Sys._Application.prototype = { - _creatingComponents: false, - _disposing: false, - get_isCreatingComponents: Sys$_Application$get_isCreatingComponents, - get_stateString: Sys$_Application$get_stateString, - get_enableHistory: Sys$_Application$get_enableHistory, - set_enableHistory: Sys$_Application$set_enableHistory, - 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_navigate: Sys$_Application$add_navigate, - remove_navigate: Sys$_Application$remove_navigate, - add_unload: Sys$_Application$add_unload, - remove_unload: Sys$_Application$remove_unload, - addComponent: Sys$_Application$addComponent, - addHistoryPoint: Sys$_Application$addHistoryPoint, - beginCreateComponents: Sys$_Application$beginCreateComponents, - dispose: Sys$_Application$dispose, - 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, - setServerId: Sys$_Application$setServerId, - setServerState: Sys$_Application$setServerState, - unregisterDisposableObject: Sys$_Application$unregisterDisposableObject, - _addComponentToSecondPass: Sys$_Application$_addComponentToSecondPass, - _deserializeState: Sys$_Application$_deserializeState, - _doInitialize: Sys$_Application$_doInitialize, - _enableHistoryInScriptManager: Sys$_Application$_enableHistoryInScriptManager, - _ensureHistory: Sys$_Application$_ensureHistory, - _getHistory: Sys$_Application$_getHistory, - _isSafari2: Sys$_Application$_isSafari2, - _loadHandler: Sys$_Application$_loadHandler, - _navigate: Sys$_Application$_navigate, - _onIdle: Sys$_Application$_onIdle, - _onIFrameLoad: Sys$_Application$_onIFrameLoad, - _onPageRequestManagerBeginRequest: Sys$_Application$_onPageRequestManagerBeginRequest, - _onPageRequestManagerEndRequest: Sys$_Application$_onPageRequestManagerEndRequest, - _raiseNavigate: Sys$_Application$_raiseNavigate, - _serializeState: Sys$_Application$_serializeState, - _setHistory: Sys$_Application$_setHistory, - _setState: Sys$_Application$_setState, - _unloadHandler: Sys$_Application$_unloadHandler, - _updateHiddenField: Sys$_Application$_updateHiddenField -} -Sys._Application.registerClass('Sys._Application', Sys.Component, Sys.IContainer); -Sys.Application = new Sys._Application(); -var $find = Sys.Application.findComponent; -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; - try { - _this._webRequest.completed(Sys.EventArgs.Empty); - } - finally { - 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 ); - 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) { - if (!encodeMethod) - encodeMethod = encodeURIComponent; - var sb = new Sys.StringBuilder(); - var i = 0; - for (var arg in queryString) { - var obj = queryString[arg]; - if (typeof(obj) === "function") continue; - var val = Sys.Serialization.JavaScriptSerializer.serialize(obj); - if (i !== 0) { - sb.append('&'); - } - sb.append(arg); - sb.append('='); - sb.append(encodeMethod(val)); - i++; - } - return sb.toString(); -} -Sys.Net.WebRequest._createUrl = function Sys$Net$WebRequest$_createUrl(url, queryString) { - if (!queryString) { - return url; - } - var qs = Sys.Net.WebRequest._createQueryString(queryString); - if (qs.length > 0) { - var sep = '?'; - if (url && url.indexOf('?') !== -1) - sep = '&'; - return url + sep + qs; - } else { - return url; - } -} -Sys.Net.WebRequest.registerClass('Sys.Net.WebRequest'); - -Sys.Net.WebServiceProxy = function Sys$Net$WebServiceProxy() { -} - function Sys$Net$WebServiceProxy$get_timeout() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._timeout; - } - 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 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; - } - 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; - } - 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_path() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._path; - } - 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$_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; - if (onSuccess === null || typeof onSuccess === 'undefined') onSuccess = this.get_defaultSucceededCallback(); - if (onFailure === null || typeof onFailure === 'undefined') 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()); - } -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_path: Sys$Net$WebServiceProxy$get_path, - set_path: Sys$Net$WebServiceProxy$set_path, - _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) { - /// - /// - /// - /// - /// - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "servicePath", type: String}, - {name: "methodName", type: String}, - {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} - ]); - if (e) throw e; - var request = new Sys.Net.WebRequest(); - request.get_headers()['Content-Type'] = 'application/json; charset=utf-8'; - if (!params) params = {}; - var urlParams = params; - if (!useGet || !urlParams) urlParams = {}; - request.set_url(Sys.Net.WebRequest._createUrl(servicePath+"/"+encodeURIComponent(methodName), urlParams)); - var body = null; - 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); - } - } - else if (contentType.startsWith("application/json")) { - if (!result || typeof(result.d) === "undefined") { - throw Sys.Net.WebServiceProxy._createFailedError(methodName, String.format(Sys.Res.webServiceInvalidJsonWrapper, methodName)); - } - 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 { - var error; - 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.Net.WebServiceError = function Sys$Net$WebServiceError(timedOut, message, stackTrace, exceptionType) { - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "timedOut", type: Boolean}, - {name: "message", type: String, mayBeNull: true}, - {name: "stackTrace", type: String, mayBeNull: true}, - {name: "exceptionType", type: String, mayBeNull: true} - ]); - if (e) throw e; - this._timedOut = timedOut; - this._message = message; - this._stackTrace = stackTrace; - this._exceptionType = exceptionType; - 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; - } -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 -} -Sys.Net.WebServiceError.registerClass('Sys.Net.WebServiceError'); -Type.registerNamespace('Sys.Services'); -Sys.Services._ProfileService = function Sys$Services$_ProfileService() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - Sys.Services._ProfileService.initializeBase(this); - this.properties = {}; -} -Sys.Services._ProfileService.DefaultWebServicePath = ''; - function Sys$Services$_ProfileService$get_defaultLoadCompletedCallback() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._defaultLoadCompletedCallback; - } - function Sys$Services$_ProfileService$set_defaultLoadCompletedCallback(value) { - var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); - if (e) throw e; - this._defaultLoadCompletedCallback = value; - } - function Sys$Services$_ProfileService$get_defaultSaveCompletedCallback() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._defaultSaveCompletedCallback; - } - function Sys$Services$_ProfileService$set_defaultSaveCompletedCallback(value) { - var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); - if (e) throw e; - this._defaultSaveCompletedCallback = value; - } - function Sys$Services$_ProfileService$get_path() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._path || ''; - } - function Sys$Services$_ProfileService$load(propertyNames, loadCompletedCallback, failedCallback, userContext) { - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "propertyNames", type: Array, mayBeNull: true, optional: true, elementType: String}, - {name: "loadCompletedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "failedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "userContext", mayBeNull: true, optional: true} - ]); - if (e) throw e; - var parameters; - var methodName; - if (!propertyNames) { - methodName = "GetAllPropertiesForCurrentUser"; - parameters = { authenticatedUserOnly: false }; - } - else { - methodName = "GetPropertiesForCurrentUser"; - parameters = { properties: this._clonePropertyNames(propertyNames), authenticatedUserOnly: false }; - } - this._invoke(this._get_path(), - methodName, - false, - parameters, - Function.createDelegate(this, this._onLoadComplete), - Function.createDelegate(this, this._onLoadFailed), - [loadCompletedCallback, failedCallback, userContext]); - } - function Sys$Services$_ProfileService$save(propertyNames, saveCompletedCallback, failedCallback, userContext) { - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "propertyNames", type: Array, mayBeNull: true, optional: true, elementType: String}, - {name: "saveCompletedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "failedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "userContext", mayBeNull: true, optional: true} - ]); - if (e) throw e; - var flattenedProperties = this._flattenProperties(propertyNames, this.properties); - this._invoke(this._get_path(), - "SetPropertiesForCurrentUser", - false, - { values: flattenedProperties.value, authenticatedUserOnly: false }, - Function.createDelegate(this, this._onSaveComplete), - Function.createDelegate(this, this._onSaveFailed), - [saveCompletedCallback, failedCallback, userContext, flattenedProperties.count]); - } - function Sys$Services$_ProfileService$_clonePropertyNames(arr) { - var nodups = []; - var seen = {}; - for (var i=0; i < arr.length; i++) { - var prop = arr[i]; - if(!seen[prop]) { Array.add(nodups, prop); seen[prop]=true; }; - } - return nodups; - } - function Sys$Services$_ProfileService$_flattenProperties(propertyNames, properties, groupName) { - var flattenedProperties = {}; - var val; - var key; - var count = 0; - if (propertyNames && propertyNames.length === 0) { - return { value: flattenedProperties, count: 0 }; - } - for (var property in properties) { - val = properties[property]; - key = groupName ? groupName + "." + property : property; - if(Sys.Services.ProfileGroup.isInstanceOfType(val)) { - var obj = this._flattenProperties(propertyNames, val, key); - var groupProperties = obj.value; - count += obj.count; - for(var subKey in groupProperties) { - var subVal = groupProperties[subKey]; - flattenedProperties[subKey] = subVal; - } - } - else { - if(!propertyNames || Array.indexOf(propertyNames, key) !== -1) { - flattenedProperties[key] = val; - count++; - } - } - } - return { value: flattenedProperties, count: count }; - } - function Sys$Services$_ProfileService$_get_path() { - var path = this.get_path(); - if (!path.length) { - path = Sys.Services._ProfileService.DefaultWebServicePath; - } - if (!path || !path.length) { - throw Error.invalidOperation(Sys.Res.servicePathNotSet); - } - return path; - } - function Sys$Services$_ProfileService$_onLoadComplete(result, context, methodName) { - if (typeof(result) !== "object") { - throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType, methodName, "Object")); - } - var unflattened = this._unflattenProperties(result); - for (var name in unflattened) { - this.properties[name] = unflattened[name]; - } - - var callback = context[0] || this.get_defaultLoadCompletedCallback() || this.get_defaultSucceededCallback(); - if (callback) { - var userContext = context[2] || this.get_defaultUserContext(); - callback(result.length, userContext, "Sys.Services.ProfileService.load"); - } - } - function Sys$Services$_ProfileService$_onLoadFailed(err, context, methodName) { - var callback = context[1] || this.get_defaultFailedCallback(); - if (callback) { - var userContext = context[2] || this.get_defaultUserContext(); - callback(err, userContext, "Sys.Services.ProfileService.load"); - } - else { - Sys.Net.WebServiceProxy._defaultFailedCallback(err, methodName); - } - } - function Sys$Services$_ProfileService$_onSaveComplete(result, context, methodName) { - var count = context[3]; - if (result !== null) { - if (result instanceof Array) { - count -= result.length; - } - else if (typeof(result) === 'number') { - count = result; - } - else { - throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType, methodName, "Array")); - } - } - - var callback = context[0] || this.get_defaultSaveCompletedCallback() || this.get_defaultSucceededCallback(); - if (callback) { - var userContext = context[2] || this.get_defaultUserContext(); - callback(count, userContext, "Sys.Services.ProfileService.save"); - } - } - function Sys$Services$_ProfileService$_onSaveFailed(err, context, methodName) { - var callback = context[1] || this.get_defaultFailedCallback(); - if (callback) { - var userContext = context[2] || this.get_defaultUserContext(); - callback(err, userContext, "Sys.Services.ProfileService.save"); - } - else { - Sys.Net.WebServiceProxy._defaultFailedCallback(err, methodName); - } - } - function Sys$Services$_ProfileService$_unflattenProperties(properties) { - var unflattenedProperties = {}; - var dotIndex; - var val; - var count = 0; - for (var key in properties) { - count++; - val = properties[key]; - dotIndex = key.indexOf('.'); - if (dotIndex !== -1) { - var groupName = key.substr(0, dotIndex); - key = key.substr(dotIndex+1); - var group = unflattenedProperties[groupName]; - if (!group || !Sys.Services.ProfileGroup.isInstanceOfType(group)) { - group = new Sys.Services.ProfileGroup(); - unflattenedProperties[groupName] = group; - } - group[key] = val; - } - else { - unflattenedProperties[key] = val; - } - } - properties.length = count; - return unflattenedProperties; - } -Sys.Services._ProfileService.prototype = { - _defaultLoadCompletedCallback: null, - _defaultSaveCompletedCallback: null, - _path: '', - _timeout: 0, - get_defaultLoadCompletedCallback: Sys$Services$_ProfileService$get_defaultLoadCompletedCallback, - set_defaultLoadCompletedCallback: Sys$Services$_ProfileService$set_defaultLoadCompletedCallback, - get_defaultSaveCompletedCallback: Sys$Services$_ProfileService$get_defaultSaveCompletedCallback, - set_defaultSaveCompletedCallback: Sys$Services$_ProfileService$set_defaultSaveCompletedCallback, - get_path: Sys$Services$_ProfileService$get_path, - load: Sys$Services$_ProfileService$load, - save: Sys$Services$_ProfileService$save, - _clonePropertyNames: Sys$Services$_ProfileService$_clonePropertyNames, - _flattenProperties: Sys$Services$_ProfileService$_flattenProperties, - _get_path: Sys$Services$_ProfileService$_get_path, - _onLoadComplete: Sys$Services$_ProfileService$_onLoadComplete, - _onLoadFailed: Sys$Services$_ProfileService$_onLoadFailed, - _onSaveComplete: Sys$Services$_ProfileService$_onSaveComplete, - _onSaveFailed: Sys$Services$_ProfileService$_onSaveFailed, - _unflattenProperties: Sys$Services$_ProfileService$_unflattenProperties -} -Sys.Services._ProfileService.registerClass('Sys.Services._ProfileService', Sys.Net.WebServiceProxy); -Sys.Services.ProfileService = new Sys.Services._ProfileService(); -Sys.Services.ProfileGroup = function Sys$Services$ProfileGroup(properties) { - /// - /// - var e = Function._validateParams(arguments, [ - {name: "properties", mayBeNull: true, optional: true} - ]); - if (e) throw e; - if (properties) { - for (var property in properties) { - this[property] = properties[property]; - } - } -} -Sys.Services.ProfileGroup.registerClass('Sys.Services.ProfileGroup'); -Sys.Services._AuthenticationService = function Sys$Services$_AuthenticationService() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - Sys.Services._AuthenticationService.initializeBase(this); -} -Sys.Services._AuthenticationService.DefaultWebServicePath = ''; - function Sys$Services$_AuthenticationService$get_defaultLoginCompletedCallback() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._defaultLoginCompletedCallback; - } - function Sys$Services$_AuthenticationService$set_defaultLoginCompletedCallback(value) { - var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); - if (e) throw e; - this._defaultLoginCompletedCallback = value; - } - function Sys$Services$_AuthenticationService$get_defaultLogoutCompletedCallback() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._defaultLogoutCompletedCallback; - } - function Sys$Services$_AuthenticationService$set_defaultLogoutCompletedCallback(value) { - var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); - if (e) throw e; - this._defaultLogoutCompletedCallback = value; - } - function Sys$Services$_AuthenticationService$get_isLoggedIn() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._authenticated; - } - function Sys$Services$_AuthenticationService$get_path() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._path || ''; - } - function Sys$Services$_AuthenticationService$login(username, password, isPersistent, customInfo, redirectUrl, loginCompletedCallback, failedCallback, userContext) { - /// - /// - /// - /// - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "username", type: String}, - {name: "password", type: String, mayBeNull: true}, - {name: "isPersistent", type: Boolean, mayBeNull: true, optional: true}, - {name: "customInfo", type: String, mayBeNull: true, optional: true}, - {name: "redirectUrl", type: String, mayBeNull: true, optional: true}, - {name: "loginCompletedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "failedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "userContext", mayBeNull: true, optional: true} - ]); - if (e) throw e; - this._invoke(this._get_path(), "Login", false, - { userName: username, password: password, createPersistentCookie: isPersistent }, - Function.createDelegate(this, this._onLoginComplete), - Function.createDelegate(this, this._onLoginFailed), - [username, password, isPersistent, customInfo, redirectUrl, loginCompletedCallback, failedCallback, userContext]); - } - function Sys$Services$_AuthenticationService$logout(redirectUrl, logoutCompletedCallback, failedCallback, userContext) { - /// - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "redirectUrl", type: String, mayBeNull: true, optional: true}, - {name: "logoutCompletedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "failedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "userContext", mayBeNull: true, optional: true} - ]); - if (e) throw e; - this._invoke(this._get_path(), "Logout", false, {}, - Function.createDelegate(this, this._onLogoutComplete), - Function.createDelegate(this, this._onLogoutFailed), - [redirectUrl, logoutCompletedCallback, failedCallback, userContext]); - } - function Sys$Services$_AuthenticationService$_get_path() { - var path = this.get_path(); - if(!path.length) { - path = Sys.Services._AuthenticationService.DefaultWebServicePath; - } - if(!path || !path.length) { - throw Error.invalidOperation(Sys.Res.servicePathNotSet); - } - return path; - } - function Sys$Services$_AuthenticationService$_onLoginComplete(result, context, methodName) { - if(typeof(result) !== "boolean") { - throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType, methodName, "Boolean")); - } - - var redirectUrl = context[4]; - var userContext = context[7] || this.get_defaultUserContext(); - var callback = context[5] || this.get_defaultLoginCompletedCallback() || this.get_defaultSucceededCallback(); - - if(result) { - this._authenticated = true; - if (callback) { - callback(true, userContext, "Sys.Services.AuthenticationService.login"); - } - - if (typeof(redirectUrl) !== "undefined" && redirectUrl !== null) { - window.location.href = redirectUrl; - } - } - else if (callback) { - callback(false, userContext, "Sys.Services.AuthenticationService.login"); - } - } - function Sys$Services$_AuthenticationService$_onLoginFailed(err, context, methodName) { - var callback = context[6] || this.get_defaultFailedCallback(); - if (callback) { - var userContext = context[7] || this.get_defaultUserContext(); - callback(err, userContext, "Sys.Services.AuthenticationService.login"); - } - else { - Sys.Net.WebServiceProxy._defaultFailedCallback(err, methodName); - } - } - function Sys$Services$_AuthenticationService$_onLogoutComplete(result, context, methodName) { - if(result !== null) { - throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType, methodName, "null")); - } - - var redirectUrl = context[0]; - var userContext = context[3] || this.get_defaultUserContext(); - var callback = context[1] || this.get_defaultLogoutCompletedCallback() || this.get_defaultSucceededCallback(); - this._authenticated = false; - - if (callback) { - callback(null, userContext, "Sys.Services.AuthenticationService.logout"); - } - - if(!redirectUrl) { - window.location.reload(); - } - else { - window.location.href = redirectUrl; - } - } - function Sys$Services$_AuthenticationService$_onLogoutFailed(err, context, methodName) { - var callback = context[2] || this.get_defaultFailedCallback(); - if (callback) { - callback(err, context[3], "Sys.Services.AuthenticationService.logout"); - } - else { - Sys.Net.WebServiceProxy._defaultFailedCallback(err, methodName); - } - } - function Sys$Services$_AuthenticationService$_setAuthenticated(authenticated) { - this._authenticated = authenticated; - } -Sys.Services._AuthenticationService.prototype = { - _defaultLoginCompletedCallback: null, - _defaultLogoutCompletedCallback: null, - _path: '', - _timeout: 0, - _authenticated: false, - get_defaultLoginCompletedCallback: Sys$Services$_AuthenticationService$get_defaultLoginCompletedCallback, - set_defaultLoginCompletedCallback: Sys$Services$_AuthenticationService$set_defaultLoginCompletedCallback, - get_defaultLogoutCompletedCallback: Sys$Services$_AuthenticationService$get_defaultLogoutCompletedCallback, - set_defaultLogoutCompletedCallback: Sys$Services$_AuthenticationService$set_defaultLogoutCompletedCallback, - get_isLoggedIn: Sys$Services$_AuthenticationService$get_isLoggedIn, - get_path: Sys$Services$_AuthenticationService$get_path, - login: Sys$Services$_AuthenticationService$login, - logout: Sys$Services$_AuthenticationService$logout, - _get_path: Sys$Services$_AuthenticationService$_get_path, - _onLoginComplete: Sys$Services$_AuthenticationService$_onLoginComplete, - _onLoginFailed: Sys$Services$_AuthenticationService$_onLoginFailed, - _onLogoutComplete: Sys$Services$_AuthenticationService$_onLogoutComplete, - _onLogoutFailed: Sys$Services$_AuthenticationService$_onLogoutFailed, - _setAuthenticated: Sys$Services$_AuthenticationService$_setAuthenticated -} -Sys.Services._AuthenticationService.registerClass('Sys.Services._AuthenticationService', Sys.Net.WebServiceProxy); -Sys.Services.AuthenticationService = new Sys.Services._AuthenticationService(); -Sys.Services._RoleService = function Sys$Services$_RoleService() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - Sys.Services._RoleService.initializeBase(this); - this._roles = []; -} -Sys.Services._RoleService.DefaultWebServicePath = ''; - function Sys$Services$_RoleService$get_defaultLoadCompletedCallback() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._defaultLoadCompletedCallback; - } - function Sys$Services$_RoleService$set_defaultLoadCompletedCallback(value) { - var e = Function._validateParams(arguments, [{name: "value", type: Function, mayBeNull: true}]); - if (e) throw e; - this._defaultLoadCompletedCallback = value; - } - function Sys$Services$_RoleService$get_path() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return this._path || ''; - } - function Sys$Services$_RoleService$get_roles() { - /// - if (arguments.length !== 0) throw Error.parameterCount(); - return Array.clone(this._roles); - } - function Sys$Services$_RoleService$isUserInRole(role) { - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "role", type: String} - ]); - if (e) throw e; - var v = this._get_rolesIndex()[role.trim().toLowerCase()]; - return !!v; - } - function Sys$Services$_RoleService$load(loadCompletedCallback, failedCallback, userContext) { - /// - /// - /// - /// - var e = Function._validateParams(arguments, [ - {name: "loadCompletedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "failedCallback", type: Function, mayBeNull: true, optional: true}, - {name: "userContext", mayBeNull: true, optional: true} - ]); - if (e) throw e; - Sys.Net.WebServiceProxy.invoke( - this._get_path(), - "GetRolesForCurrentUser", - false, - {} , - Function.createDelegate(this, this._onLoadComplete), - Function.createDelegate(this, this._onLoadFailed), - [loadCompletedCallback, failedCallback, userContext], - this.get_timeout()); - } - function Sys$Services$_RoleService$_get_path() { - var path = this.get_path(); - if(!path || !path.length) { - path = Sys.Services._RoleService.DefaultWebServicePath; - } - if(!path || !path.length) { - throw Error.invalidOperation(Sys.Res.servicePathNotSet); - } - return path; - } - function Sys$Services$_RoleService$_get_rolesIndex() { - if (!this._rolesIndex) { - var index = {}; - for(var i=0; i < this._roles.length; i++) { - index[this._roles[i].toLowerCase()] = true; - } - this._rolesIndex = index; - } - return this._rolesIndex; - } - function Sys$Services$_RoleService$_onLoadComplete(result, context, methodName) { - if(result && !(result instanceof Array)) { - throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType, methodName, "Array")); - } - this._roles = result; - this._rolesIndex = null; - var callback = context[0] || this.get_defaultLoadCompletedCallback() || this.get_defaultSucceededCallback(); - if (callback) { - var userContext = context[2] || this.get_defaultUserContext(); - var clonedResult = Array.clone(result); - callback(clonedResult, userContext, "Sys.Services.RoleService.load"); - } - } - function Sys$Services$_RoleService$_onLoadFailed(err, context, methodName) { - var callback = context[1] || this.get_defaultFailedCallback(); - if (callback) { - var userContext = context[2] || this.get_defaultUserContext(); - callback(err, userContext, "Sys.Services.RoleService.load"); - } - else { - Sys.Net.WebServiceProxy._defaultFailedCallback(err, methodName); - } - } -Sys.Services._RoleService.prototype = { - _defaultLoadCompletedCallback: null, - _rolesIndex: null, - _timeout: 0, - _path: '', - get_defaultLoadCompletedCallback: Sys$Services$_RoleService$get_defaultLoadCompletedCallback, - set_defaultLoadCompletedCallback: Sys$Services$_RoleService$set_defaultLoadCompletedCallback, - get_path: Sys$Services$_RoleService$get_path, - get_roles: Sys$Services$_RoleService$get_roles, - isUserInRole: Sys$Services$_RoleService$isUserInRole, - load: Sys$Services$_RoleService$load, - _get_path: Sys$Services$_RoleService$_get_path, - _get_rolesIndex: Sys$Services$_RoleService$_get_rolesIndex, - _onLoadComplete: Sys$Services$_RoleService$_onLoadComplete, - _onLoadFailed: Sys$Services$_RoleService$_onLoadFailed -} -Sys.Services._RoleService.registerClass('Sys.Services._RoleService', Sys.Net.WebServiceProxy); -Sys.Services.RoleService = new Sys.Services._RoleService(); -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); - } -} - -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$_getMonthIndex(value) { - if (!this._upperMonths) { - this._upperMonths = this._toUpperArray(this.dateTimeFormat.MonthNames); - } - return Array.indexOf(this._upperMonths, this._toUpper(value)); - } - function Sys$CultureInfo$_getAbbrMonthIndex(value) { - if (!this._upperAbbrMonths) { - this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames); - } - return Array.indexOf(this._upperAbbrMonths, this._toUpper(value)); - } - 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, - _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._parse = function Sys$CultureInfo$_parse(value) { - var cultureInfo = Sys.Serialization.JavaScriptSerializer.deserialize(value); - return new Sys.CultureInfo(cultureInfo.name, cultureInfo.numberFormat, cultureInfo.dateTimeFormat); -} -Sys.CultureInfo.registerClass('Sys.CultureInfo'); -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",""]}}'); -if (typeof(__cultureInfo) === 'undefined') { - var __cultureInfo = '{"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",""]}}'; -} -Sys.CultureInfo.CurrentCulture = Sys.CultureInfo._parse(__cultureInfo); -delete __cultureInfo; - -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'); - if (this._element) { - var name = this.get_name(); - if (name) { - this._element[name] = null; - } - Array.remove(this._element._behaviors, this); - 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; -} - 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_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 = undefined; - 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; - 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_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, - removeCssClass: Sys$UI$Control$removeCssClass, - toggleCssClass: Sys$UI$Control$toggleCssClass -} -Sys.UI.Control.registerClass('Sys.UI.Control', Sys.Component); - - -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.', -'methodRegisteredTwice':'Method {0} has already been registered.', -'cantSetIdAfterInit':'The id property can\'t be set on this object after initialization.', -'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.', -'typeShouldBeTypeOrString':'Value is not a valid type or a valid type name.', -'historyInvalidHistorySettingCombination':'Cannot set enableHistory to false when ScriptManager.EnableHistory is true.', -'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.', -'eventHandlerNotFound':'Handler not found.', -'circularParentChain':'The chain of control parents can\'t have circular references.', -'undefinedEvent':'\'{0}\' is not an event.', -'notAMethod':'{0} is not a method.', -'propertyUndefined':'\'{0}\' is not a property or an existing field.', -'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.\r\n Missing call to Sys.Application.notifyScriptLoaded().', -'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.', -'namespaceContainsObject':'Object {0} already exists and is not a namespace.', -'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.', -'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.', -'appComponentMustBeInitialized':'Components must be initialized before they are added to the Application object.', -'baseNotAClass':'Value is not a class.', -'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.', -'historyMissingHiddenInput':'For the history feature to work in Safari 2, the page must have a hidden input element with id \'__history\'.', -'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.', -'badTypeName':'Value is not the name of the type being registered or the name is a reserved word.', -'argumentInteger':'Value must be an integer.', -'scriptLoadMultipleCallbacks':'The script \'{0}\' contains multiple calls to Sys.Application.notifyScriptLoaded(). Only one is allowed.', -'invokeCalledTwice':'Cannot call invoke more than once.', -'webServiceFailed':'The server method \'{0}\' failed with the following error: {1}', -'webServiceInvalidJsonWrapper':'The server method \'{0}\' returned invalid data. The \'d\' property is missing from the JSON wrapper.', -'argumentType':'Object cannot be converted to the required type.', -'argumentNull':'Value cannot be null.', -'controlCantSetId':'The id property can\'t be set on a control.', -'formatBadFormatSpecifier':'Format specifier was invalid.', -'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}', -'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?' -}; - -if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded(); diff --git a/mvc1/src/SampleApplication/Scripts/MicrosoftAjax.js b/mvc1/src/SampleApplication/Scripts/MicrosoftAjax.js deleted file mode 100644 index db85c14..0000000 --- a/mvc1/src/SampleApplication/Scripts/MicrosoftAjax.js +++ /dev/null @@ -1,7 +0,0 @@ -//---------------------------------------------------------- -// 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;cc){var f=Error.parameterCount();f.popStackFrame();return f}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!=="undefined"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d0&&(dc.Calendar.TwoDigitYearMax)return a-100}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":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?)")}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/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(g,c,h){var e=false;for(var a=1,i=h.length;a31)return null;break;case "MMMM":c=j._getMonthIndex(a);if(c<0||c>11)return null;break;case "MMM":c=j._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case "M":case "MM":var c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case "y":case "yy":f=Date._expandYear(m,parseInt(a,10));if(f<0||f>9999)return null;break;case "yyyy":f=parseInt(a,10);if(f<0||f>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":n=parseInt(a,10);if(n<0||n>59)return null;break;case "s":case "ss":o=parseInt(a,10);if(o<0||o>59)return null;break;case "tt":case "t":var u=a.toUpperCase();r=u===m.PMDesignator.toUpperCase();if(!r&&u!==m.AMDesignator.toUpperCase())return null;break;case "f":e=parseInt(a,10)*100;if(e<0||e>999)return null;break;case "ff":e=parseInt(a,10)*10;if(e<0||e>999)return null;break;case "fff":e=parseInt(a,10);if(e<0||e>999)return null;break;case "dddd":g=j._getDayIndex(a);if(g<0||g>6)return null;break;case "ddd":g=j._getAbbrDayIndex(a);if(g<0||g>6)return null;break;case "zzz":var q=a.split(/:/);if(q.length!==2)return null;var i=parseInt(q[0],10);if(i<-12||i>13)return null;var l=parseInt(q[1],10);if(l<0||l>59)return null;k=i*60+(a.startsWith("-")?-l:l);break;case "z":case "zz":var i=parseInt(a,10);if(i<-12||i>13)return null;k=i*60}}var b=new Date;if(f===null)f=b.getFullYear();if(c===null)c=b.getMonth();if(h===null)h=b.getDate();b.setFullYear(f,c,h);if(b.getDate()!==h)return null;if(g!==null&&b.getDay()!==g)return null;if(r&&d<12)d+=12;b.setHours(d,n,o,e);if(k!==null){var t=b.getMinutes()-(k+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(t/60,10),t%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,h){if(!e||e.length===0||e==="i")if(h&&h.name.length>0)return this.toLocaleString();else return this.toString();var d=h.dateTimeFormat;e=Date._expandFormat(d,e);var a=new Sys.StringBuilder,b;function c(a){if(a<10)return "0"+a;return a.toString()}function g(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toString()}var j=0,i=Date._getTokenRegExp();for(;true;){var l=i.lastIndex,f=i.exec(e),k=e.slice(l,f?f.index:e.length);j+=Date._appendPreOrPostMatch(k,a);if(!f)break;if(j%2===1){a.append(f[0]);continue}switch(f[0]){case "dddd":a.append(d.DayNames[this.getDay()]);break;case "ddd":a.append(d.AbbreviatedDayNames[this.getDay()]);break;case "dd":a.append(c(this.getDate()));break;case "d":a.append(this.getDate());break;case "MMMM":a.append(d.MonthNames[this.getMonth()]);break;case "MMM":a.append(d.AbbreviatedMonthNames[this.getMonth()]);break;case "MM":a.append(c(this.getMonth()+1));break;case "M":a.append(this.getMonth()+1);break;case "yyyy":a.append(this.getFullYear());break;case "yy":a.append(c(this.getFullYear()%100));break;case "y":a.append(this.getFullYear()%100);break;case "hh":b=this.getHours()%12;if(b===0)b=12;a.append(c(b));break;case "h":b=this.getHours()%12;if(b===0)b=12;a.append(b);break;case "HH":a.append(c(this.getHours()));break;case "H":a.append(this.getHours());break;case "mm":a.append(c(this.getMinutes()));break;case "m":a.append(this.getMinutes());break;case "ss":a.append(c(this.getSeconds()));break;case "s":a.append(this.getSeconds());break;case "tt":a.append(this.getHours()<12?d.AMDesignator:d.PMDesignator);break;case "t":a.append((this.getHours()<12?d.AMDesignator:d.PMDesignator).charAt(0));break;case "f":a.append(g(this.getMilliseconds()).charAt(0));break;case "ff":a.append(g(this.getMilliseconds()).substr(0,2));break;case "fff":a.append(g(this.getMilliseconds()));break;case "z":b=this.getTimezoneOffset()/60;a.append((b<=0?"+":"-")+Math.floor(Math.abs(b)));break;case "zz":b=this.getTimezoneOffset()/60;a.append((b<=0?"+":"-")+c(Math.floor(Math.abs(b))));break;case "zzz":b=this.getTimezoneOffset()/60;a.append((b<=0?"+":"-")+c(Math.floor(Math.abs(b)))+d.TimeSeparator+c(Math.abs(this.getTimezoneOffset()%60)))}}return a.toString()};Number.__typeName="Number";Number.__class=true;Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===""&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h==="")h="+";var j,d,f=e.indexOf("e");if(f<0)f=e.indexOf("E");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join("");var n=a.NumberGroupSeparator.replace(/\u00A0/g," ");if(a.NumberGroupSeparator!==n)c=c.split(n).join("");var l=h+c;if(k!==null)l+="."+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]==="")i[0]="+";l+="e"+i[0]+i[1]}if(l.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=" "+b;c=" "+c;case 3:if(a.endsWith(b))return ["-",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return ["+",a.substr(0,a.length-c.length)];break;case 2:b+=" ";c+=" ";case 1:if(a.startsWith(b))return ["-",a.substr(b.length)];else if(a.startsWith(c))return ["+",a.substr(c.length)];break;case 0:if(a.startsWith("(")&&a.endsWith(")"))return ["-",a.substr(1,a.length-2)]}return ["",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(d,j){if(!d||d.length===0||d==="i")if(j&&j.name.length>0)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(d.slice(1),10);var c;switch(d.charAt(0)){case "d":case "D":c="n";if(b!==-1)e=g(""+e,b,true);if(this<0)e=-e;break;case "c":case "C":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;e=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;e=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;e=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+=e;break;case "$":f+=a.CurrencySymbol;break;case "-":f+=a.NegativeSign;break;case "%":f+=a.PercentSymbol}}return f};RegExp.__typeName="RegExp";RegExp.__class=true;Array.__typeName="Array";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Array.indexOf(a,b)>=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)};if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=this.getBaseMethod(a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(d,c){var b=this.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Type.prototype.getBaseType=function(){return typeof this.__baseType==="undefined"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d-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;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.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b=0;c--)$removeHandler(a,b,d[c].handler)}a._events=null}},$removeHandler=Sys.UI.DomEvent.removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b=0)d.className=(a.substr(0,b)+" "+a.substring(b+c.length+1,a.length)).trim()};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._ScriptLoader=function(){this._scriptsToLoad=null;this._sessions=[];this._scriptLoadedDelegate=Function.createDelegate(this,this._scriptLoadedHandler)};Sys._ScriptLoader.prototype={dispose:function(){this._stopSession();this._loading=false;if(this._events)delete this._events;this._sessions=null;this._currentSession=null;this._scriptLoadedDelegate=null},loadScripts:function(d,b,c,a){var e={allScriptsLoadedCallback:b,scriptLoadFailedCallback:c,scriptLoadTimeoutCallback:a,scriptsToLoad:this._scriptsToLoad,scriptTimeout:d};this._scriptsToLoad=null;this._sessions[this._sessions.length]=e;if(!this._loading)this._nextSession()},notifyScriptLoaded:function(){if(!this._loading)return;this._currentTask._notified++;if(Sys.Browser.agent===Sys.Browser.Safari)if(this._currentTask._notified===1)window.setTimeout(Function.createDelegate(this,function(){this._scriptLoadedHandler(this._currentTask.get_scriptElement(),true)}),0)},queueCustomScriptTag:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,a)},queueScriptBlock:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{text:a})},queueScriptReference:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{src:a})},_createScriptElement:function(c){var a=document.createElement("script");a.type="text/javascript";for(var b in c)a[b]=c[b];return a},_loadScriptsInternal:function(){var b=this._currentSession;if(b.scriptsToLoad&&b.scriptsToLoad.length>0){var c=Array.dequeue(b.scriptsToLoad),a=this._createScriptElement(c);if(a.text&&Sys.Browser.agent===Sys.Browser.Safari){a.innerHTML=a.text;delete a.text}if(typeof c.src==="string"){this._currentTask=new Sys._ScriptLoaderTask(a,this._scriptLoadedDelegate);this._currentTask.execute()}else{document.getElementsByTagName("head")[0].appendChild(a);Sys._ScriptLoader._clearScript(a);this._loadScriptsInternal()}}else{this._stopSession();var d=b.allScriptsLoadedCallback;if(d)d(this);this._nextSession()}},_nextSession:function(){if(this._sessions.length===0){this._loading=false;this._currentSession=null;return}this._loading=true;var a=Array.dequeue(this._sessions);this._currentSession=a;if(a.scriptTimeout>0)this._timeoutCookie=window.setTimeout(Function.createDelegate(this,this._scriptLoadTimeoutHandler),a.scriptTimeout*1000);this._loadScriptsInternal()},_raiseError:function(a){var c=this._currentSession.scriptLoadFailedCallback,b=this._currentTask.get_scriptElement();this._stopSession();if(c){c(this,b,a);this._nextSession()}else{this._loading=false;throw Sys._ScriptLoader._errorScriptLoadFailed(b.src,a)}},_scriptLoadedHandler:function(a,b){if(b&&this._currentTask._notified)if(this._currentTask._notified>1)this._raiseError(true);else{Array.add(Sys._ScriptLoader._getLoadedScripts(),a.src);this._currentTask.dispose();this._currentTask=null;this._loadScriptsInternal()}else this._raiseError(false)},_scriptLoadTimeoutHandler:function(){var a=this._currentSession.scriptLoadTimeoutCallback;this._stopSession();if(a)a(this);this._nextSession()},_stopSession:function(){if(this._timeoutCookie){window.clearTimeout(this._timeoutCookie);this._timeoutCookie=null}if(this._currentTask){this._currentTask.dispose();this._currentTask=null}}};Sys._ScriptLoader.registerClass("Sys._ScriptLoader",null,Sys.IDisposable);Sys._ScriptLoader.getInstance=function(){var a=Sys._ScriptLoader._activeInstance;if(!a)a=Sys._ScriptLoader._activeInstance=new Sys._ScriptLoader;return a};Sys._ScriptLoader.isScriptLoaded=function(b){var a=document.createElement("script");a.src=b;return Array.contains(Sys._ScriptLoader._getLoadedScripts(),a.src)};Sys._ScriptLoader.readLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){var b=Sys._ScriptLoader._referencedScripts=[],c=document.getElementsByTagName("script");for(i=c.length-1;i>=0;i--){var d=c[i],a=d.src;if(a.length)if(!Array.contains(b,a))Array.add(b,a)}}};Sys._ScriptLoader._clearScript=function(a){if(!Sys.Debug.isDebug)a.parentNode.removeChild(a)};Sys._ScriptLoader._errorScriptLoadFailed=function(b,d){var a;if(d)a=Sys.Res.scriptLoadMultipleCallbacks;else a=Sys.Res.scriptLoadFailed;var e="Sys.ScriptLoadFailedException: "+String.format(a,b),c=Error.create(e,{name:"Sys.ScriptLoadFailedException","scriptUrl":b});c.popStackFrame();return c};Sys._ScriptLoader._getLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){Sys._ScriptLoader._referencedScripts=[];Sys._ScriptLoader.readLoadedScripts()}return Sys._ScriptLoader._referencedScripts};Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a;this._notified=0};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoader._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;var b=this;window.setTimeout(function(){b._completedCallback(a,true)},0)}};Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask",null,Sys.IDisposable);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.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass("Sys.HistoryEventArgs",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._appLoadHandler=null;this._beginRequestHandler=null;this._clientId=null;this._currentEntry="";this._endRequestHandler=null;this._history=null;this._enableHistory=false;this._historyFrame=null;this._historyInitialized=false;this._historyInitialLength=0;this._historyLength=0;this._historyPointIsNew=false;this._ignoreTimer=false;this._initialState=null;this._state={};this._timerCookie=0;this._timerHandler=null;this._uniqueId=null;this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);this._loadHandlerDelegate=Function.createDelegate(this,this._loadHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._unloadHandlerDelegate);Sys.UI.DomEvent.addHandler(window,"load",this._loadHandlerDelegate)};Sys._Application.prototype={_creatingComponents:false,_disposing:false,get_isCreatingComponents:function(){return this._creatingComponents},get_stateString:function(){var a=window.location.hash;if(this._isSafari2()){var b=this._getHistory();if(b)a=b[window.history.length-this._historyInitialLength]}if(a.length>0&&a.charAt(0)==="#")a=a.substring(1);if(Sys.Browser.agent===Sys.Browser.Firefox)a=this._serializeState(this._deserializeState(a,true));return a},get_enableHistory:function(){return this._enableHistory},set_enableHistory:function(a){this._enableHistory=a},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_navigate:function(a){this.get_events().addHandler("navigate",a)},remove_navigate:function(a){this.get_events().removeHandler("navigate",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},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()},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,e=b.length;a'");d.write(""+(c||document.title)+"parent.Sys.Application._onIFrameLoad(\''+a+"');");d.close()}this._ignoreTimer=false;var h=this.get_stateString();this._currentEntry=a;if(a!==h){if(this._isSafari2()){var g=this._getHistory();g[window.history.length-this._historyInitialLength+1]=a;this._setHistory(g);this._historyLength=window.history.length+1;var b=document.createElement("form");b.method="get";b.action="#"+a;document.appendChild(b);b.submit();document.removeChild(b)}else window.location.hash=a;if(typeof c!=="undefined"&&c!==null)document.title=c}}},_unloadHandler:function(){this.dispose()},_updateHiddenField:function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}}};Sys._Application.registerClass("Sys._Application",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Type.registerNamespace("Sys.Net");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass("Sys.Net.WebRequestExecutor");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=["Msxml2.DOMDocument.3.0","Msxml2.DOMDocument"];for(var b=0,f=c.length;b0)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(d,b){if(!b)b=encodeURIComponent;var a=new Sys.StringBuilder,f=0;for(var c in d){var e=d[c];if(typeof e==="function")continue;var g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(f!==0)a.append("&");a.append(c);a.append("=");a.append(b(g));f++}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b){if(!b)return a;var d=Sys.Net.WebRequest._createQueryString(b);if(d.length>0){var c="?";if(a&&a.indexOf("?")!==-1)c="&";return a+c+d}else return a};Sys.Net.WebRequest.registerClass("Sys.Net.WebRequest");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange("value",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed},set_defaultFailedCallback:function(a){this._failed=a},get_path:function(){return this._path},set_path:function(a){this._path=a},_invoke:function(d,e,g,f,c,b,a){if(c===null||typeof c==="undefined")c=this.get_defaultSucceededCallback();if(b===null||typeof b==="undefined")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())}};Sys.Net.WebServiceProxy.registerClass("Sys.Net.WebServiceProxy");Sys.Net.WebServiceProxy.invoke=function(k,a,j,d,i,c,f,h){var b=new Sys.Net.WebRequest;b.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!d)d={};var g=d;if(!j||!g)g={};b.set_url(Sys.Net.WebRequest._createUrl(k+"/"+encodeURIComponent(a),g));var e=null;if(!j){e=Sys.Serialization.JavaScriptSerializer.serialize(d);if(e==="{}")e=""}b.set_body(e);b.add_completed(l);if(h&&h>0)b.set_timeout(h);b.invoke();function l(d){if(d.get_responseAvailable()){var g=d.get_statusCode(),b=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))b=d.get_object();else if(e.startsWith("text/xml"))b=d.get_xml();else b=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(b)b=new Sys.Net.WebServiceError(false,b.Message,b.StackTrace,b.ExceptionType)}else if(e.startsWith("application/json"))b=b.d;if(g<200||g>=300||h){if(c){if(!b||!h)b=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a),"","");b._statusCode=g;c(b,f,a)}}else if(i)i(b,f,a)}else{var j;if(d.get_timedOut())j=String.format(Sys.Res.webServiceTimedOut,a);else j=String.format(Sys.Res.webServiceFailedNoMsg,a);if(c)c(new Sys.Net.WebServiceError(d.get_timedOut(),j,"",""),f,a)}}return b};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys.Net.WebServiceError=function(c,d,b,a){this._timedOut=c;this._message=d;this._stackTrace=b;this._exceptionType=a;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}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError");Type.registerNamespace("Sys.Services");Sys.Services._ProfileService=function(){Sys.Services._ProfileService.initializeBase(this);this.properties={}};Sys.Services._ProfileService.DefaultWebServicePath="";Sys.Services._ProfileService.prototype={_defaultLoadCompletedCallback:null,_defaultSaveCompletedCallback:null,_path:"",_timeout:0,get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_defaultSaveCompletedCallback:function(){return this._defaultSaveCompletedCallback},set_defaultSaveCompletedCallback:function(a){this._defaultSaveCompletedCallback=a},get_path:function(){return this._path||""},load:function(c,d,e,f){var b,a;if(!c){a="GetAllPropertiesForCurrentUser";b={authenticatedUserOnly:false}}else{a="GetPropertiesForCurrentUser";b={properties:this._clonePropertyNames(c),authenticatedUserOnly:false}}this._invoke(this._get_path(),a,false,b,Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[d,e,f])},save:function(d,b,c,e){var a=this._flattenProperties(d,this.properties);this._invoke(this._get_path(),"SetPropertiesForCurrentUser",false,{values:a.value,authenticatedUserOnly:false},Function.createDelegate(this,this._onSaveComplete),Function.createDelegate(this,this._onSaveFailed),[b,c,e,a.count])},_clonePropertyNames:function(e){var c=[],d={};for(var b=0;b0)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 - /// - /// - /// - /// - /// -}; -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_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._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('&'); - } - } - 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 requestBody = ''; - if (verb.toUpperCase() === 'GET' || verb.toUpperCase() === '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); - request.set_httpVerb(verb); - 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.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) { - /// - /// - /// - /// - /// - /// - evt.preventDefault(); - 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/mvc1/src/SampleApplication/Scripts/MicrosoftMvcAjax.js b/mvc1/src/SampleApplication/Scripts/MicrosoftMvcAjax.js deleted file mode 100644 index 6d6a7e8..0000000 --- a/mvc1/src/SampleApplication/Scripts/MicrosoftMvcAjax.js +++ /dev/null @@ -1,23 +0,0 @@ -//---------------------------------------------------------- -// 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_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.$1(anchor.href,'post','',anchor,ajaxOptions);} -Sys.Mvc.MvcHelpers=function(){} -Sys.Mvc.MvcHelpers.$0=function($p0){var $0=$p0.elements;var $1=new Sys.StringBuilder();var $2=$0.length;for(var $3=0;$3<$2;$3++){var $4=$0[$3];var $5=$4.name;if(!$5||!$5.length){continue;}var $6=$4.tagName.toUpperCase();if($6==='INPUT'){var $7=$4;var $8=$7.type;if(($8==='text')||($8==='password')||($8==='hidden')||((($8==='checkbox')||($8==='radio'))&&$4.checked)){$1.append(encodeURIComponent($5));$1.append('=');$1.append(encodeURIComponent($7.value));$1.append('&');}}else if($6==='SELECT'){var $9=$4;var $A=$9.options.length;for(var $B=0;$B<$A;$B++){var $C=$9.options[$B];if($C.selected){$1.append(encodeURIComponent($5));$1.append('=');$1.append(encodeURIComponent($C.value));$1.append('&');}}}else if($6==='TEXTAREA'){$1.append(encodeURIComponent($5));$1.append('=');$1.append(encodeURIComponent(($4.value)));$1.append('&');}}return $1.toString();} -Sys.Mvc.MvcHelpers.$1=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='';if($p1.toUpperCase()==='GET'||$p1.toUpperCase()==='DELETE'){if($p0.indexOf('?')>-1){if(!$p0.endsWith('&')){$p0+='&';}$p0+=$p2;}else{$p0+='?';$p0+=$p2;}}else{$0=$p2;}var $1=new Sys.Net.WebRequest();$1.set_url($p0);$1.set_httpVerb($p1);$1.set_body($0);if($p1.toUpperCase()==='PUT'){$1.get_headers()['Content-Type']='application/x-www-form-urlencoded;';}$1.get_headers()['X-Requested-With']='XMLHttpRequest';var $2=null;if($p4.updateTargetId){$2=$get($p4.updateTargetId);}var $3=null;if($p4.loadingElementId){$3=$get($p4.loadingElementId);}var $4=new Sys.Mvc.AjaxContext($1,$2,$3,$p4.insertionMode);var $5=true;if($p4.onBegin){$5=$p4.onBegin($4)!==false;}if($3){Sys.UI.DomElement.setVisible($4.get_loadingElement(),true);}if($5){$1.add_completed(Function.createDelegate(null,function($p1_0){ -Sys.Mvc.MvcHelpers.$2($1,$p4,$4);}));$1.invoke();}} -Sys.Mvc.MvcHelpers.$2=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.handleSubmit=function(form,evt,ajaxOptions){evt.preventDefault();var $0=Sys.Mvc.MvcHelpers.$0(form);Sys.Mvc.MvcHelpers.$1(form.action,form.method||'post',$0,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/mvc1/src/SampleApplication/Scripts/jquery-1.3.2-vsdoc.js b/mvc1/src/SampleApplication/Scripts/jquery-1.3.2-vsdoc.js deleted file mode 100644 index 27aefb8..0000000 --- a/mvc1/src/SampleApplication/Scripts/jquery-1.3.2-vsdoc.js +++ /dev/null @@ -1,6255 +0,0 @@ -/* - * This file has been commented 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.3.2a - */ - -/* - * jQuery JavaScript Library v1.3.2 - * - * Copyright (c) 2009 John Resig, http://jquery.com/ - * - * 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. - * - * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) - * Revision: 6246 - */ - -(function(){ - -var - // Will speed up references to window, and allows munging its name. - window = this, - // Will speed up references to undefined, and allows munging its name. - undefined, - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - // Map over the $ in case of overwrite - _$ = window.$, - - jQuery = window.jQuery = window.$ = function(selector, context) { - /// - /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements. - /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML. - /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s). - /// 4: $(callback) - A shorthand for $(document).ready(). - /// - /// - /// 1: expression - An expression to search with. - /// 2: html - A string of HTML to create on the fly. - /// 3: elements - DOM element(s) to be encapsulated by a jQuery object. - /// 4: callback - The function to execute when the DOM is ready. - /// - /// - /// 1: context - A DOM Element, Document or jQuery to use as context. - /// - /// - /// The DOM node context originally passed to jQuery() (if none was passed then context will be equal to the document). - /// - /// - /// A selector representing selector originally passed to jQuery(). - /// - /// - - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - /// - /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements. - /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML. - /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s). - /// 4: $(callback) - A shorthand for $(document).ready(). - /// - /// - /// 1: expression - An expression to search with. - /// 2: html - A string of HTML to create on the fly. - /// 3: elements - DOM element(s) to be encapsulated by a jQuery object. - /// 4: callback - The function to execute when the DOM is ready. - /// - /// - /// 1: context - A DOM Element, Document or jQuery to use as context. - /// - /// - - // Make sure that a selection was provided - selector = selector || document; - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this[0] = selector; - this.length = 1; - this.context = selector; - return this; - } - // Handle HTML strings - if (typeof selector === "string") { - // Are we dealing with HTML string or an ID? - var 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]) - selector = jQuery.clean([match[1]], context); - - // HANDLE: $("#id") - else { - var elem = document.getElementById(match[3]); - - // Handle the case where IE and Opera return items - // by name instead of ID - if (elem && elem.id != match[3]) - return jQuery().find(selector); - - // Otherwise, we inject the element directly into the jQuery object - var ret = jQuery(elem || []); - ret.context = document; - ret.selector = selector; - return ret; - } - - // HANDLE: $(expr, [context]) - // (which is just equivalent to: $(content).find(expr) - } else - return jQuery(context).find(selector); - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) - return jQuery( document ).ready( selector ); - - // Make sure that old selector state is passed along - if ( selector.selector && selector.context ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return this.setArray(jQuery.isArray( selector ) ? - selector : - jQuery.makeArray(selector)); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.3.2", - - // The number of elements contained in the matched element set - size: function() { - /// - /// The number of elements currently matched. - /// Part of Core - /// - /// - - return this.length; - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - /// - /// Access a single matched element. num is used to access the - /// Nth element matched. - /// Part of Core - /// - /// - /// - /// Access the element in the Nth position. - /// - - return num == undefined ? - - // Return a 'clean' array - Array.prototype.slice.call( this ) : - - // Return just the object - this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - /// - /// Set the jQuery object to an array of elements, while maintaining - /// the stack. - /// Part of Core - /// - /// - /// - /// An array of elements - /// - - // Build a new jQuery matched element set - var ret = jQuery( 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; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - /// - /// Set the jQuery object to an array of elements. This operation is - /// completely destructive - be sure to use .pushStack() if you wish to maintain - /// the jQuery stack. - /// Part of Core - /// - /// - /// - /// An array of elements - /// - - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - Array.prototype.push.apply( this, elems ); - - return this; - }, - - // 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 ) { - /// - /// Execute a function within the context of every matched element. - /// This means that every time the passed-in function is executed - /// (which is once for every element matched) the 'this' keyword - /// points to the specific element. - /// Additionally, the function, when executed, is passed a single - /// argument representing the position of the element in the matched - /// set. - /// Part of Core - /// - /// - /// - /// A function to execute - /// - - return jQuery.each( this, callback, args ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - /// - /// Searches every matched element for the object and returns - /// the index of the element, if found, starting with zero. - /// Returns -1 if the object wasn't found. - /// Part of Core - /// - /// - /// - /// Object to search for - /// - - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem && elem.jquery ? elem[0] : elem - , this ); - }, - - attr: function( name, value, type ) { - /// - /// Set a single property to a computed value, on all matched elements. - /// Instead of a value, a function is provided, that computes the value. - /// Part of DOM/Attributes - /// - /// - /// - /// The name of the property to set. - /// - /// - /// A function returning the value to set. - /// - - var options = name; - - // Look for the case where we're accessing a style value - if ( typeof name === "string" ) - if ( value === undefined ) - return this[0] && jQuery[ type || "attr" ]( this[0], name ); - - else { - options = {}; - options[ name ] = value; - } - - // Check to see if we're setting style values - return this.each(function(i){ - // Set all the styles - for ( name in options ) - jQuery.attr( - type ? - this.style : - this, - name, jQuery.prop( this, options[ name ], type, i, name ) - ); - }); - }, - - css: function( key, value ) { - /// - /// Set a single style property to a value, on all matched elements. - /// If a number is provided, it is automatically converted into a pixel value. - /// Part of CSS - /// - /// - /// - /// The name of the property to set. - /// - /// - /// The value to set the property to. - /// - - // ignore negative width and height values - if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) - value = undefined; - return this.attr( key, value, "curCSS" ); - }, - - text: function( text ) { - /// - /// Set the text contents of all matched elements. - /// Similar to html(), but escapes HTML (replace "<" and ">" with their - /// HTML entities). - /// Part of DOM/Attributes - /// - /// - /// - /// The text value to set the contents of the element to. - /// - - if ( typeof text !== "object" && text != null ) - return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); - - var ret = ""; - - jQuery.each( text || this, function(){ - jQuery.each( this.childNodes, function(){ - if ( this.nodeType != 8 ) - ret += this.nodeType != 1 ? - this.nodeValue : - jQuery.fn.text( [ this ] ); - }); - }); - - return ret; - }, - - wrapAll: function( html ) { - /// - /// Wrap all matched elements with a structure of other elements. - /// This wrapping process is most useful for injecting additional - /// stucture into a document, without ruining the original semantic - /// qualities of a document. - /// This works by going through the first element - /// provided and finding the deepest ancestor element within its - /// structure - it is that element that will en-wrap everything else. - /// This does not work with elements that contain text. Any necessary text - /// must be added after the wrapping is done. - /// Part of DOM/Manipulation - /// - /// - /// - /// A DOM element that will be wrapped around the target. - /// - - if ( this[0] ) { - // The elements to wrap the target around - var wrap = jQuery( html, this[0].ownerDocument ).clone(); - - if ( this[0].parentNode ) - wrap.insertBefore( this[0] ); - - wrap.map(function(){ - var elem = this; - - while ( elem.firstChild ) - elem = elem.firstChild; - - return elem; - }).append(this); - } - - return this; - }, - - wrapInner: function( html ) { - /// - /// Wraps the inner child contents of each matched elemenht (including text nodes) with an HTML structure. - /// - /// - /// A string of HTML or a DOM element that will be wrapped around the target contents. - /// - /// - - return this.each(function(){ - jQuery( this ).contents().wrapAll( html ); - }); - }, - - wrap: function( html ) { - /// - /// Wrap all matched elements with a structure of other elements. - /// This wrapping process is most useful for injecting additional - /// stucture into a document, without ruining the original semantic - /// qualities of a document. - /// This works by going through the first element - /// provided and finding the deepest ancestor element within its - /// structure - it is that element that will en-wrap everything else. - /// This does not work with elements that contain text. Any necessary text - /// must be added after the wrapping is done. - /// Part of DOM/Manipulation - /// - /// - /// - /// A DOM element that will be wrapped around the target. - /// - - return this.each(function(){ - jQuery( this ).wrapAll( html ); - }); - }, - - append: function() { - /// - /// Append content to the inside of every matched element. - /// This operation is similar to doing an appendChild to all the - /// specified elements, adding them into the document. - /// Part of DOM/Manipulation - /// - /// - /// - /// Content to append to the target - /// - - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.appendChild( elem ); - }); - }, - - prepend: function() { - /// - /// Prepend content to the inside of every matched element. - /// This operation is the best way to insert elements - /// inside, at the beginning, of all matched elements. - /// Part of DOM/Manipulation - /// - /// - /// - /// Content to prepend to the target. - /// - - return this.domManip(arguments, true, function(elem){ - if (this.nodeType == 1) - this.insertBefore( elem, this.firstChild ); - }); - }, - - before: function() { - /// - /// Insert content before each of the matched elements. - /// Part of DOM/Manipulation - /// - /// - /// - /// Content to insert before each target. - /// - - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this ); - }); - }, - - after: function() { - /// - /// Insert content after each of the matched elements. - /// Part of DOM/Manipulation - /// - /// - /// - /// Content to insert after each target. - /// - - return this.domManip(arguments, false, function(elem){ - this.parentNode.insertBefore( elem, this.nextSibling ); - }); - }, - - end: function() { - /// - /// End the most recent 'destructive' operation, reverting the list of matched elements - /// back to its previous state. After an end operation, the list of matched elements will - /// revert to the last state of matched elements. - /// If there was no destructive operation before, an empty set is returned. - /// Part of DOM/Traversing - /// - /// - - return this.prevObject || jQuery( [] ); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: [].push, - sort: [].sort, - splice: [].splice, - - find: function( selector ) { - /// - /// Searches for all elements that match the specified expression. - /// This method is a good way to find additional descendant - /// elements with which to process. - /// All searching is done using a jQuery expression. The expression can be - /// written using CSS 1-3 Selector syntax, or basic XPath. - /// Part of DOM/Traversing - /// - /// - /// - /// An expression to search with. - /// - /// - - if ( this.length === 1 ) { - var ret = this.pushStack( [], "find", selector ); - ret.length = 0; - jQuery.find( selector, this[0], ret ); - return ret; - } else { - return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){ - return jQuery.find( selector, elem ); - })), "find", selector ); - } - }, - - clone: function( events ) { - /// - /// Clone matched DOM Elements and select the clones. - /// This is useful for moving copies of the elements to another - /// location in the DOM. - /// Part of DOM/Manipulation - /// - /// - /// - /// (Optional) Set to false if you don't want to clone all descendant nodes, in addition to the element itself. - /// - - // Do the clone - var ret = this.map(function(){ - if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { - // IE copies events bound via attachEvent when - // using cloneNode. Calling detachEvent on the - // clone will also remove the events from the orignal - // In order to get around this, we use innerHTML. - // Unfortunately, this means some modifications to - // attributes in IE that are actually only stored - // as properties will not be copied (such as the - // the name attribute on an input). - var html = this.outerHTML; - if ( !html ) { - var div = this.ownerDocument.createElement("div"); - div.appendChild( this.cloneNode(true) ); - html = div.innerHTML; - } - - return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0]; - } else - return this.cloneNode(true); - }); - - // Copy the events from the original to the clone - if ( events === true ) { - var orig = this.find("*").andSelf(), i = 0; - - ret.find("*").andSelf().each(function(){ - if ( this.nodeName !== orig[i].nodeName ) - return; - - var events = jQuery.data( orig[i], "events" ); - - for ( var type in events ) { - for ( var handler in events[ type ] ) { - jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data ); - } - } - - i++; - }); - } - - // Return the cloned set - return ret; - }, - - filter: function( selector ) { - /// - /// Removes all elements from the set of matched elements that do not - /// pass the specified filter. This method is used to narrow down - /// the results of a search. - /// }) - /// Part of DOM/Traversing - /// - /// - /// - /// A function to use for filtering - /// - /// - - return this.pushStack( - jQuery.isFunction( selector ) && - jQuery.grep(this, function(elem, i){ - return selector.call( elem, i ); - }) || - - jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ - return elem.nodeType === 1; - }) ), "filter", selector ); - }, - - closest: function( selector ) { - /// - /// Get a set of elements containing the closest parent element that matches the specified selector, the starting element included. - /// - /// - /// - /// An expression to filter the elements with. - /// - /// - - var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null, - closer = 0; - - return this.map(function(){ - var cur = this; - while ( cur && cur.ownerDocument ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) { - jQuery.data(cur, "closest", closer); - return cur; - } - cur = cur.parentNode; - closer++; - } - }); - }, - - not: function( selector ) { - /// - /// Removes any elements inside the array of elements from the set - /// of matched elements. This method is used to remove one or more - /// elements from a jQuery object. - /// Part of DOM/Traversing - /// - /// - /// A set of elements to remove from the jQuery set of matched elements. - /// - /// - - if ( typeof selector === "string" ) - // test special case where just one selector is passed in - if ( isSimple.test( selector ) ) - return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); - else - selector = jQuery.multiFilter( selector, this ); - - var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; - return this.filter(function() { - return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; - }); - }, - - add: function( selector ) { - /// - /// Adds one or more Elements to the set of matched elements. - /// Part of DOM/Traversing - /// - /// - /// One or more Elements to add - /// - /// - - return this.pushStack( jQuery.unique( jQuery.merge( - this.get(), - typeof selector === "string" ? - jQuery( selector ) : - jQuery.makeArray( selector ) - ))); - }, - - is: function( selector ) { - /// - /// Checks the current selection against an expression and returns true, - /// if at least one element of the selection fits the given expression. - /// Does return false, if no element fits or the expression is not valid. - /// filter(String) is used internally, therefore all rules that apply there - /// apply here, too. - /// Part of DOM/Traversing - /// - /// - /// - /// The expression with which to filter - /// - - return !!selector && jQuery.multiFilter( selector, this ).length > 0; - }, - - hasClass: function( selector ) { - /// - /// Checks the current selection against a class and returns whether at least one selection has a given class. - /// - /// The class to check against - /// True if at least one element in the selection has the class, otherwise false. - - return !!selector && this.is( "." + selector ); - }, - - val: function( value ) { - /// - /// Set the value of every matched element. - /// Part of DOM/Attributes - /// - /// - /// - /// Set the property to the specified value. - /// - - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if( jQuery.nodeName( elem, 'option' ) ) - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var 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 - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc 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 ); - } - } - - return values; - } - - // Everything else, we just grab the value - return (elem.value || "").replace(/\r/g, ""); - - } - - return undefined; - } - - if ( typeof value === "number" ) - value += ''; - - return this.each(function(){ - if ( this.nodeType != 1 ) - return; - - if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) - this.checked = (jQuery.inArray(this.value, value) >= 0 || - jQuery.inArray(this.name, value) >= 0); - - else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(value); - - jQuery( "option", this ).each(function(){ - this.selected = (jQuery.inArray( this.value, values ) >= 0 || - jQuery.inArray( this.text, values ) >= 0); - }); - - if ( !values.length ) - this.selectedIndex = -1; - - } else - this.value = value; - }); - }, - - html: function( value ) { - /// - /// Set the html contents of every matched element. - /// This property is not available on XML documents. - /// Part of DOM/Attributes - /// - /// - /// - /// Set the html contents to the specified value. - /// - - return value === undefined ? - (this[0] ? - this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") : - null) : - this.empty().append( value ); - }, - - replaceWith: function( value ) { - /// - /// Replaces all matched element with the specified HTML or DOM elements. - /// - /// - /// The content with which to replace the matched elements. - /// - /// The element that was just replaced. - - return this.after( value ).remove(); - }, - - eq: function( i ) { - /// - /// Reduce the set of matched elements to a single element. - /// The position of the element in the set of matched elements - /// starts at 0 and goes to length - 1. - /// Part of Core - /// - /// - /// - /// pos The index of the element that you wish to limit to. - /// - - return this.slice( i, +i + 1 ); - }, - - slice: function() { - /// - /// Selects a subset of the matched elements. Behaves exactly like the built-in Array slice method. - /// - /// Where to start the subset (0-based). - /// Where to end the subset (not including the end element itself). - /// If omitted, ends at the end of the selection - /// The sliced elements - - return this.pushStack( Array.prototype.slice.apply( this, arguments ), - "slice", Array.prototype.slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - /// - /// This member is internal. - /// - /// - /// - - return this.pushStack( jQuery.map(this, function(elem, i){ - return callback.call( elem, i, elem ); - })); - }, - - andSelf: function() { - /// - /// Adds the previous selection to the current selection. - /// - /// - - return this.add( this.prevObject ); - }, - - domManip: function( args, table, callback ) { - /// - /// Args - /// - /// - /// Insert TBODY in TABLEs if one is not found. - /// - /// - /// If dir<0, process args in reverse order. - /// - /// - /// The function doing the DOM manipulation. - /// - /// - /// - /// Part of Core - /// - - if ( this[0] ) { - var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), - scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), - first = fragment.firstChild; - - if ( first ) - for ( var i = 0, l = this.length; i < l; i++ ) - callback.call( root(this[i], first), this.length > 1 || i > 0 ? - fragment.cloneNode(true) : fragment ); - - if ( scripts ) - jQuery.each( scripts, evalScript ); - } - - return this; - - function root( elem, cur ) { - return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? - (elem.getElementsByTagName("tbody")[0] || - elem.appendChild(elem.ownerDocument.createElement("tbody"))) : - elem; - } - } -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -function evalScript( i, elem ) { - /// - /// This method is internal. - /// - /// - - if ( elem.src ) - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - - else - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - - if ( elem.parentNode ) - elem.parentNode.removeChild( elem ); -} - -function now(){ - /// - /// Gets the current date. - /// - /// The current date. - return +new Date; -} - -jQuery.extend = jQuery.fn.extend = function() { - /// - /// Extend one object with one or more others, returning the original, - /// modified, object. This is a great utility for simple inheritance. - /// jQuery.extend(settings, options); - /// var settings = jQuery.extend({}, defaults, options); - /// Part of JavaScript - /// - /// - /// The object to extend - /// - /// - /// The object that will be merged into the first. - /// - /// - /// (optional) More objects to merge into the first - /// - /// - - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; - - // 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 ( var name in options ) { - var src = target[ name ], copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) - continue; - - // Recurse if we're merging object values - if ( deep && copy && typeof copy === "object" && !copy.nodeType ) - target[ name ] = jQuery.extend( deep, - // Never move original objects, clone them - src || ( copy.length != null ? [ ] : { } ) - , copy ); - - // Don't bring in undefined values - else if ( copy !== undefined ) - target[ name ] = copy; - - } - - // Return the modified object - return target; -}; - -// exclude the following css properties to add px -var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, - // cache defaultView - defaultView = document.defaultView || {}, - toString = Object.prototype.toString; - -jQuery.extend({ - noConflict: function( deep ) { - /// - /// Run this function to give control of the $ variable back - /// to whichever library first implemented it. This helps to make - /// sure that jQuery doesn't conflict with the $ object - /// of other libraries. - /// By using this function, you will only be able to access jQuery - /// using the 'jQuery' variable. For example, where you used to do - /// $("div p"), you now must do jQuery("div p"). - /// Part of Core - /// - /// - - window.$ = _$; - - if ( deep ) - window.jQuery = _jQuery; - - return jQuery; - }, - - // 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 ) { - /// - /// Determines if the parameter passed is a function. - /// - /// The object to check - /// True if the parameter is a function; otherwise false. - - return toString.call(obj) === "[object Function]"; - }, - - isArray: function(obj) { - /// - /// Determine if the parameter passed is an array. - /// - /// Object to test whether or not it is an array. - /// True if the parameter is a function; otherwise false. - - return toString.call(obj) === "[object Array]"; - }, - - // check if an element is in a (or is an) XML document - isXMLDoc: function( elem ) { - /// - /// Determines if the parameter passed is an XML document. - /// - /// The object to test - /// True if the parameter is an XML document; otherwise false. - - return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || - !!elem.ownerDocument && jQuery.isXMLDoc(elem.ownerDocument); - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - /// - /// Internally evaluates a script in a global context. - /// - /// - - if ( data && /\S/.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - if ( jQuery.support.scriptEval ) - script.appendChild( document.createTextNode( data ) ); - else - script.text = data; - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - /// - /// Checks whether the specified element has the specified DOM node name. - /// - /// The element to examine - /// The node name to check - /// True if the specified node name matches the node's DOM node name; otherwise false - - return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - /// - /// A generic iterator function, which can be used to seemlessly - /// iterate over both objects and arrays. This function is not the same - /// as $().each() - which is used to iterate, exclusively, over a jQuery - /// object. This function can be used to iterate over anything. - /// The callback has two arguments:the key (objects) or index (arrays) as first - /// the first, and the value as the second. - /// Part of JavaScript - /// - /// - /// The object, or array, to iterate over. - /// - /// - /// The function that will be executed on every object. - /// - /// - - var name, i = 0, length = object.length; - - if ( args ) { - if ( length === undefined ) { - 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 ( length === undefined ) { - for ( name in object ) - if ( callback.call( object[ name ], name, object[ name ] ) === false ) - break; - } else - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} - } - - return object; - }, - - prop: function( elem, value, type, i, name ) { - /// - /// This method is internal. - /// - /// - // This member is not documented within the jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.prop - - // Handle executable functions - if ( jQuery.isFunction( value ) ) - value = value.call( elem, i ); - - // Handle passing in a number to a CSS property - return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? - value + "px" : - value; - }, - - className: { - // internal only, use addClass("class") - add: function( elem, classNames ) { - /// - /// Internal use only; use addClass('class') - /// - /// - - jQuery.each((classNames || "").split(/\s+/), function(i, className){ - if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) - elem.className += (elem.className ? " " : "") + className; - }); - }, - - // internal only, use removeClass("class") - remove: function( elem, classNames ) { - /// - /// Internal use only; use removeClass('class') - /// - /// - - if (elem.nodeType == 1) - elem.className = classNames !== undefined ? - jQuery.grep(elem.className.split(/\s+/), function(className){ - return !jQuery.className.has( classNames, className ); - }).join(" ") : - ""; - }, - - // internal only, use hasClass("class") - has: function( elem, className ) { - /// - /// Internal use only; use hasClass('class') - /// - /// - - return elem && jQuery.inArray(className, (elem.className || elem).toString().split(/\s+/)) > -1; - } - }, - - // A method for quickly swapping in/out CSS properties to get correct calculations - swap: function( elem, options, callback ) { - /// - /// Swap in/out style options. - /// - - var old = {}; - // Remember the old values, and insert the new ones - for ( var name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - callback.call( elem ); - - // Revert the old values - for ( var name in options ) - elem.style[ name ] = old[ name ]; - }, - - css: function( elem, name, force, extra ) { - /// - /// This method is internal only. - /// - /// - // This method is undocumented in jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.css - - if ( name == "width" || name == "height" ) { - var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; - - function getWH() { - val = name == "width" ? elem.offsetWidth : elem.offsetHeight; - - if ( extra === "border" ) - return; - - jQuery.each( which, function() { - if ( !extra ) - val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; - if ( extra === "margin" ) - val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0; - else - val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; - }); - } - - if ( elem.offsetWidth !== 0 ) - getWH(); - else - jQuery.swap( elem, props, getWH ); - - return Math.max(0, Math.round(val)); - } - - return jQuery.curCSS( elem, name, force ); - }, - - curCSS: function( elem, name, force ) { - /// - /// This method is internal only. - /// - /// - // This method is undocumented in jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.curCSS - - var ret, style = elem.style; - - // We need to handle opacity special in IE - if ( name == "opacity" && !jQuery.support.opacity ) { - ret = jQuery.attr( style, "opacity" ); - - return ret == "" ? - "1" : - ret; - } - - // Make sure we're using the right name for getting the float value - if ( name.match( /float/i ) ) - name = styleFloat; - - if ( !force && style && style[ name ] ) - ret = style[ name ]; - - else if ( defaultView.getComputedStyle ) { - - // Only "float" is needed here - if ( name.match( /float/i ) ) - name = "float"; - - name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); - - var computedStyle = defaultView.getComputedStyle( elem, null ); - - if ( computedStyle ) - ret = computedStyle.getPropertyValue( name ); - - // We should always get a number back from opacity - if ( name == "opacity" && ret == "" ) - ret = "1"; - - } else if ( elem.currentStyle ) { - var camelCase = name.replace(/\-(\w)/g, function(all, letter){ - return letter.toUpperCase(); - }); - - ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; - - // From the awesome hack by Dean Edwards - // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 - - // If we're not dealing with a regular pixel number - // but a number that has a weird ending, we need to convert it to pixels - if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { - // Remember the original values - var left = style.left, rsLeft = elem.runtimeStyle.left; - - // Put in the new values to get a computed value out - elem.runtimeStyle.left = elem.currentStyle.left; - style.left = ret || 0; - ret = style.pixelLeft + "px"; - - // Revert the changed values - style.left = left; - elem.runtimeStyle.left = rsLeft; - } - } - - return ret; - }, - - clean: function( elems, context, fragment ) { - /// - /// This method is internal only. - /// - /// - // This method is undocumented in the jQuery API: http://docs.jquery.com/action/edit/Internals/jQuery.clean - - - 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; - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { - var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); - if ( match ) - return [ context.createElement( match[1] ) ]; - } - - var ret = [], scripts = [], div = context.createElement("div"); - - jQuery.each(elems, function(i, elem){ - if ( typeof elem === "number" ) - elem += ''; - - if ( !elem ) - return; - - // Convert html string into DOM nodes - if ( typeof elem === "string" ) { - // Fix "XHTML"-style tags in all browsers - elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ - return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? - all : - front + ">"; - }); - - // Trim whitespace, otherwise indexOf won't work as expected - var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase(); - - var wrap = - // option or optgroup - !tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && - [ 1, "", "
    " ] || - - !tags.indexOf("", "" ] || - - // matched above - (!tags.indexOf("", "" ] || - - !tags.indexOf("", "" ] || - - // IE can't serialize and - - - - Detects whether we are currently in a WoW64 process or not. - - - - - - - - - - - - - Detects whether we are currently in a 32-bit or 64-bit process (not necessarily what the OS is running). Note that as of the time of this writing, this will ALWAYS return false because NAnt is compiled to run in 32-bit mode only. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mvc2/ReleaseNotes.txt b/mvc2/ReleaseNotes.txt deleted file mode 100644 index fe3bd38..0000000 --- a/mvc2/ReleaseNotes.txt +++ /dev/null @@ -1,3 +0,0 @@ -Version 3.0.0.0 ---------------- -- Changed: This extension requires now Ninject.Web.Common. This allows combining it with the other web extesnions (WCF + MVC) \ No newline at end of file diff --git a/mvc2/UnzipDependencies.cmd b/mvc2/UnzipDependencies.cmd deleted file mode 100644 index 4b715cf..0000000 --- a/mvc2/UnzipDependencies.cmd +++ /dev/null @@ -1,5 +0,0 @@ -..\tools\nant\nant.exe -buildfile:Ninject.build UnzipDependencies %1 %2 %3 %4 %5 %6 %7 %8 - -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc2/build-alpha.cmd b/mvc2/build-alpha.cmd deleted file mode 100644 index f7403b3..0000000 --- a/mvc2/build-alpha.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-alpha" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-alpha" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc2/build-beta.cmd b/mvc2/build-beta.cmd deleted file mode 100644 index 9d0984a..0000000 --- a/mvc2/build-beta.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-beta" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-beta" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc2/build-rc1.cmd b/mvc2/build-rc1.cmd deleted file mode 100644 index ae54073..0000000 --- a/mvc2/build-rc1.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-rc1" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-rc1" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc2/build-release.cmd b/mvc2/build-release.cmd deleted file mode 100644 index 5361bbd..0000000 --- a/mvc2/build-release.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc2/build.cmd b/mvc2/build.cmd deleted file mode 100644 index 52aa285..0000000 --- a/mvc2/build.cmd +++ /dev/null @@ -1,3 +0,0 @@ -..\tools\nant\nant.exe -buildfile:Ninject.build %1 %2 %3 %4 %5 %6 %7 %8 - -pause \ No newline at end of file diff --git a/mvc2/nuget/Ninject.Web.Mvc.nuspec b/mvc2/nuget/Ninject.Web.Mvc.nuspec deleted file mode 100644 index 8f06fd0..0000000 --- a/mvc2/nuget/Ninject.Web.Mvc.nuspec +++ /dev/null @@ -1,20 +0,0 @@ - - - - Ninject.Web.Mvc2 - 2.2.0.1 - Nate Kohari, Ian Davis, Remo Gloor - true - https://github.com/ninject/ninject.web.mvc/raw/master/mvc2/LICENSE.txt - Extension for Ninject providing integration with ASP.NET MVC2 - Extension for Ninject providing integration with ASP.NET MVC2 - en-US - Ninject ioc di web mvc mvc2 - https://github.com/ninject/ninject/raw/master/logos/Ninject-Logo32.png - http://www.ninject.org - - - - - - \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/ControllerMissingBindingResolver.cs b/mvc2/src/Ninject.Web.Mvc/ControllerMissingBindingResolver.cs deleted file mode 100644 index 556d450..0000000 --- a/mvc2/src/Ninject.Web.Mvc/ControllerMissingBindingResolver.cs +++ /dev/null @@ -1,50 +0,0 @@ -// -// Authors: Nate Kohari , Remo Gloor -// Copyright (c) 2007-2010, Enkari, Ltd. and contributors -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System; - using System.Collections.Generic; - using System.Linq; - using System.Web.Mvc; - using Ninject.Activation; - using Ninject.Activation.Providers; - using Ninject.Components; - using Ninject.Infrastructure; - using Ninject.Parameters; - using Ninject.Planning.Bindings; - using Ninject.Planning.Bindings.Resolvers; - - /// - /// Nissing binding resolver that creates a binding for unknown controllers. - /// - public class ControllerMissingBindingResolver : NinjectComponent, IMissingBindingResolver - { - /// - /// Returns any bindings from the specified collection that match the specified request. - /// - /// The multimap of all registered bindings. - /// The request in question. - /// The series of matching bindings. - public IEnumerable Resolve(Multimap bindings, IRequest request) - { - var service = request.Service; - if (typeof(Controller).IsAssignableFrom(service)) - { - var binding = new Binding(service) { ProviderCallback = StandardProvider.GetCreationCallback(service) }; - binding.Parameters.Add( - typeof(AsyncController).IsAssignableFrom(service) - ? new PropertyValue("ActionInvoker", ctx => ctx.Kernel.Get()) - : new PropertyValue("ActionInvoker", ctx => ctx.Kernel.Get())); - return new[] { binding }; - } - - return Enumerable.Empty(); - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/FilterInjector.cs b/mvc2/src/Ninject.Web.Mvc/FilterInjector.cs deleted file mode 100644 index 2659262..0000000 --- a/mvc2/src/Ninject.Web.Mvc/FilterInjector.cs +++ /dev/null @@ -1,60 +0,0 @@ -// -// Authors: Nate Kohari , Remo Gloor -// Copyright (c) 2007-2010, Enkari, Ltd. and contributors -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System.Linq; - using System.Web.Mvc; - - /// - /// Injects all filters of a filter info. - /// - public class FilterInjector : IFilterInjector - { - /// - /// The kernel - /// - private readonly IKernel kernel; - - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - public FilterInjector(IKernel kernel) - { - this.kernel = kernel; - } - - /// - /// Injects all filters of the specified filter info. - /// - /// The filter info. - public void Inject(FilterInfo filterInfo) - { - foreach (IActionFilter filter in filterInfo.ActionFilters.Where(f => f != null)) - { - this.kernel.Inject(filter); - } - - foreach (IAuthorizationFilter filter in filterInfo.AuthorizationFilters.Where(f => f != null)) - { - this.kernel.Inject(filter); - } - - foreach (IExceptionFilter filter in filterInfo.ExceptionFilters.Where(f => f != null)) - { - this.kernel.Inject(filter); - } - - foreach (IResultFilter filter in filterInfo.ResultFilters.Where(f => f != null)) - { - this.kernel.Inject(filter); - } - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/IFilterInjector.cs b/mvc2/src/Ninject.Web.Mvc/IFilterInjector.cs deleted file mode 100644 index d97b866..0000000 --- a/mvc2/src/Ninject.Web.Mvc/IFilterInjector.cs +++ /dev/null @@ -1,24 +0,0 @@ -// -// Authors: Nate Kohari , Remo Gloor -// Copyright (c) 2007-2010, Enkari, Ltd. and contributors -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System.Web.Mvc; - - /// - /// Injects all filters of a FiltorInfo. - /// - public interface IFilterInjector - { - /// - /// Injects all filters of the specified filter info. - /// - /// The filter info. - void Inject(FilterInfo filterInfo); - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/MvcModule.cs b/mvc2/src/Ninject.Web.Mvc/MvcModule.cs deleted file mode 100644 index 82affbe..0000000 --- a/mvc2/src/Ninject.Web.Mvc/MvcModule.cs +++ /dev/null @@ -1,52 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2011 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc -{ - using System.Web; - using System.Web.Routing; - - using Ninject.Modules; - using Ninject.Planning.Bindings.Resolvers; - using Ninject.Web.Common; - - /// - /// Defines the bindings and plugins of the MVC web extension. - /// - public class MvcModule : GlobalKernelRegistrationModule - { - /// - /// Loads the module into the kernel. - /// - public override void Load() - { - base.Load(); - this.Kernel.Components.Add(); - - this.Kernel.Components.RemoveAll(); - this.Kernel.Components.Add(); - this.Kernel.Components.Add(); - - this.Bind().ToConstant(RouteTable.Routes); - this.Bind().ToMethod(ctx => HttpContext.Current).InTransientScope(); - this.Bind().ToMethod(ctx => new HttpContextWrapper(HttpContext.Current)).InTransientScope(); - this.Bind().To().InSingletonScope(); - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj b/mvc2/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj deleted file mode 100644 index 1facfca..0000000 --- a/mvc2/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj +++ /dev/null @@ -1,128 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {82222179-0EB8-4C43-AD48-6EA388349C64} - Library - Properties - Ninject.Web.Mvc - Ninject.Web.Mvc - v3.5 - 512 - true - ..\Ninject.snk - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - true - full - false - ..\..\build\debug\ - DEBUG;TRACE - prompt - 4 - - - true - AllRules.ruleset - - - pdbonly - true - ..\..\build\release\ - TRACE - prompt - 4 - ..\..\build\release\Ninject.Web.Mvc.xml - true - AllRules.ruleset - - - - ..\..\..\lib\Ninject\net-3.5\Ninject.dll - - - ..\..\..\lib\Ninject.Web.Common\net-3.5\Ninject.Web.Common.dll - - - - 3.5 - - - - False - ..\..\lib\System.Web.Abstractions.dll - 3.5 - - - ..\..\..\lib\Mvc2\System.Web.Mvc.dll - - - False - ..\..\lib\System.Web.Routing.dll - 3.5 - - - - - Properties\SharedAssemblyInfo.cs - - - Code - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/NinjectActionInvoker.cs b/mvc2/src/Ninject.Web.Mvc/NinjectActionInvoker.cs deleted file mode 100644 index d592ca8..0000000 --- a/mvc2/src/Ninject.Web.Mvc/NinjectActionInvoker.cs +++ /dev/null @@ -1,45 +0,0 @@ -// -// Authors: Nate Kohari , Josh Close -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System.Web.Mvc; - - /// - /// An that injects filters with dependencies. - /// - public class NinjectActionInvoker : ControllerActionInvoker - { - /// - /// The injector for filter injection. - /// - private readonly IFilterInjector filterInjector; - - /// - /// Initializes a new instance of the class. - /// - /// The filter injector. - public NinjectActionInvoker(IFilterInjector filterInjector) - { - this.filterInjector = filterInjector; - } - - /// - /// Gets the filters for the specified request and action. - /// - /// The controller context. - /// The action descriptor. - /// The filters. - protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) - { - FilterInfo filterInfo = base.GetFilters(controllerContext, actionDescriptor); - this.filterInjector.Inject(filterInfo); - return filterInfo; - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/NinjectAsyncActionInvoker.cs b/mvc2/src/Ninject.Web.Mvc/NinjectAsyncActionInvoker.cs deleted file mode 100644 index 26d3648..0000000 --- a/mvc2/src/Ninject.Web.Mvc/NinjectAsyncActionInvoker.cs +++ /dev/null @@ -1,46 +0,0 @@ -// -// Authors: Nate Kohari , Josh Close -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System.Web.Mvc; - using System.Web.Mvc.Async; - - /// - /// An that injects filters with dependencies. - /// - public class NinjectAsyncActionInvoker : AsyncControllerActionInvoker - { - /// - /// The injector for filter injection. - /// - private readonly IFilterInjector filterInjector; - - /// - /// Initializes a new instance of the class. - /// - /// The filter injector. - public NinjectAsyncActionInvoker(IFilterInjector filterInjector) - { - this.filterInjector = filterInjector; - } - - /// - /// Gets the filters for the specified request and action. - /// - /// The controller context. - /// The action descriptor. - /// The filters. - protected override FilterInfo GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) - { - FilterInfo filterInfo = base.GetFilters(controllerContext, actionDescriptor); - this.filterInjector.Inject(filterInfo); - return filterInfo; - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/NinjectControllerFactory.cs b/mvc2/src/Ninject.Web.Mvc/NinjectControllerFactory.cs deleted file mode 100644 index 79895df..0000000 --- a/mvc2/src/Ninject.Web.Mvc/NinjectControllerFactory.cs +++ /dev/null @@ -1,53 +0,0 @@ -// -// Authors: Nate Kohari , Remo Gloor , Josh Close -// Copyright (c) 2007-2010, Enkari, Ltd. -// -// Dual-licensed under the Apache License, Version 2.0, and the Microsoft Public License (Ms-PL). -// See the file LICENSE.txt for details. -// - -namespace Ninject.Web.Mvc -{ - using System; - using System.Web.Mvc; - using System.Web.Routing; - - /// - /// A controller factory that creates s via Ninject. - /// - public class NinjectControllerFactory : DefaultControllerFactory - { - /// - /// Initializes a new instance of the class. - /// - /// The kernel that should be used to create controllers. - public NinjectControllerFactory(IKernel kernel) - { - this.Kernel = kernel; - } - - /// - /// Gets the kernel that will be used to create controllers. - /// - public IKernel Kernel { get; private set; } - - /// - /// Gets a controller instance of type controllerType. - /// - /// The request context. - /// Type of controller to create. - /// The controller instance. - protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) - { - if (controllerType == null) - { - // let the base handle 404 errors with proper culture information - return base.GetControllerInstance(requestContext, controllerType); - } - - var controller = this.Kernel.Get(controllerType) as IController; - - return controller ?? base.GetControllerInstance(requestContext, controllerType); - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs b/mvc2/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs deleted file mode 100644 index 160b6fb..0000000 --- a/mvc2/src/Ninject.Web.Mvc/NinjectMvcHttpApplicationPlugin.cs +++ /dev/null @@ -1,82 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2011 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc -{ - using System.Web; - using System.Web.Mvc; - - using Ninject.Activation; - using Ninject.Components; - using Ninject.Web.Common; - - /// - /// The web plugin implementation for MVC - /// - public class NinjectMvcHttpApplicationPlugin : NinjectComponent, INinjectHttpApplicationPlugin - { - /// - /// The kernel - /// - private readonly IKernel kernel; - - /// - /// Initializes a new instance of the class. - /// - /// The kernel. - public NinjectMvcHttpApplicationPlugin(IKernel kernel) - { - this.kernel = kernel; - } - - /// - /// Gets the request scope. - /// - /// The context. - /// The request scope. - public object GetRequestScope(IContext context) - { - return HttpContext.Current; - } - - /// - /// Starts this instance. - /// - public void Start() - { - ControllerBuilder.Current.SetControllerFactory(this.CreateControllerFactory()); - } - - /// - /// Stops this instance. - /// - public void Stop() - { - } - - /// - /// Creates the controller factory that is used to create the controllers. - /// - /// The created controller factory. - protected virtual NinjectControllerFactory CreateControllerFactory() - { - return new NinjectControllerFactory(this.kernel); - } - } -} \ No newline at end of file diff --git a/mvc2/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs b/mvc2/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs deleted file mode 100644 index 0022bb2..0000000 --- a/mvc2/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,24 +0,0 @@ -// Author: Nate Kohari -// Copyright (c) 2007-2009, Enkari, Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -using System.Reflection; -using System.Security; - -[assembly: AssemblyTitle("Ninject ASP.NET MVC Integration")] -[assembly: AssemblyDescriptionAttribute("Extension for Ninject providing integration with ASP.NET MVC2")] - -#if !NO_PARTIAL_TRUST -[assembly: AllowPartiallyTrustedCallers] -#endif \ No newline at end of file diff --git a/mvc2/src/Ninject.snk b/mvc2/src/Ninject.snk deleted file mode 100644 index b91a25c532bdc53f297e3ef0d36930042ebc8c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098={3S2k-`k?*)EtPaU1Un6fWvohO?p29 zVpB(@KkpW^lm|g5TW1DzfXp7+QSqs=Rm?i_-1l=OVjJ1^MBbhg5v9`jy)aZ)J*jZR zHD&`nk-+{$Al0xRnQAhwIz;-^nRM;ARBu6!%2;log`uH!p|_oG$WL|DxD=!dD!jRi zoHXRL%2!?F;xndqR<4c&rPg3w^S+$ZH|V`C9VV;U1EO(skm%7o5X>`?VJqUL+ z8mkVVs+Stbdm%+Tt!VXSY|}C~XQgxUxCuE_+trvCkVwUFgF_XfP8@q8km*4U{FB&c z5YcN`t8{^$z6n icNWHC*TDE}u*8xSDiFy=0C|2J diff --git a/mvc2/src/SampleApplication/Areas/SampleArea/Controllers/AreaTestController.cs b/mvc2/src/SampleApplication/Areas/SampleArea/Controllers/AreaTestController.cs deleted file mode 100644 index f8f2b0e..0000000 --- a/mvc2/src/SampleApplication/Areas/SampleArea/Controllers/AreaTestController.cs +++ /dev/null @@ -1,54 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Areas.SampleArea.Controllers -{ - using System.Web.Mvc; - using SampleApplication.Controllers; - - /// - /// Test controller for testing areas - /// - public class AreaTestController : Controller - { - /// - /// The model from which the view model is initalized. - /// - private readonly IHomeControllerModel model; - - /// - /// Initializes a new instance of the class. - /// - /// The model. - public AreaTestController(IHomeControllerModel model) - { - this.model = model; - } - - /// - /// Index action of the controller - /// - /// The view action result. - public ActionResult Index() - { - ViewData["Message"] = this.model.WelcomeMessage; - return View(); - } - } -} diff --git a/mvc2/src/SampleApplication/Areas/SampleArea/Views/AreaTest/Index.aspx b/mvc2/src/SampleApplication/Areas/SampleArea/Views/AreaTest/Index.aspx deleted file mode 100644 index d08539a..0000000 --- a/mvc2/src/SampleApplication/Areas/SampleArea/Views/AreaTest/Index.aspx +++ /dev/null @@ -1,12 +0,0 @@ -<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> - - - Index - - - - -

    <%: ViewData["Message"] %>

    - Greetings from the sample area. - -
    diff --git a/mvc2/src/SampleApplication/Areas/SampleArea/Views/Web.config b/mvc2/src/SampleApplication/Areas/SampleArea/Views/Web.config deleted file mode 100644 index aa7a38d..0000000 --- a/mvc2/src/SampleApplication/Areas/SampleArea/Views/Web.config +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mvc2/src/SampleApplication/Controllers/AccountController.cs b/mvc2/src/SampleApplication/Controllers/AccountController.cs deleted file mode 100644 index 3c597cf..0000000 --- a/mvc2/src/SampleApplication/Controllers/AccountController.cs +++ /dev/null @@ -1,187 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - using System; - using System.Web.Mvc; - using System.Web.Security; - using SampleApplication.Models.Account; - using SampleApplication.Services.Account; - - /// - /// The account controller - /// - public class AccountController : Controller - { - /// - /// Initializes a new instance of the class. - /// - /// The forms authentication service. - /// The membership service. - public AccountController( - IFormsAuthenticationService formsAuthenticationService, - IMembershipService membershipService) - { - this.MembershipService = membershipService; - this.FormsAuthenticationService = formsAuthenticationService; - } - - /// - /// Gets the forms authentication service. - /// - public IFormsAuthenticationService FormsAuthenticationService { get; private set; } - - /// - /// Gets the membership service. - /// - public IMembershipService MembershipService { get; private set; } - - /// - /// The log on action - /// - /// The log on view. - public ActionResult LogOn() - { - return View(); - } - - /// - /// Handles the log on request. - /// - /// The model. - /// The return URL. - /// The home view in case of success. The log on view otherwise. - [HttpPost] - public ActionResult LogOn(LogOnModel model, string returnUrl) - { - if (ModelState.IsValid) - { - if (this.MembershipService.ValidateUser(model.UserName, model.Password)) - { - this.FormsAuthenticationService.SignIn(model.UserName, model.RememberMe); - if (!String.IsNullOrEmpty(returnUrl)) - { - return Redirect(returnUrl); - } - - return this.RedirectToAction("Index", "Home"); - } - - this.ModelState.AddModelError(string.Empty, "The user name or password provided is incorrect."); - } - - // If we got this far, something failed, redisplay form - return View(model); - } - - /// - /// THe log of action handler. - /// - /// Redirect to the home view. - public ActionResult LogOff() - { - this.FormsAuthenticationService.SignOut(); - - return RedirectToAction("Index", "Home"); - } - - /// - /// Handler for the register action. - /// - /// The register view. - public ActionResult Register() - { - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - return View(); - } - - /// - /// Handles the register request. - /// - /// The model. - /// The home view in case of success. The register view otherwise. - [HttpPost] - public ActionResult Register(RegisterModel model) - { - if (ModelState.IsValid) - { - // Attempt to register the user - MembershipCreateStatus createStatus = - this.MembershipService.CreateUser(model.UserName, model.Password, model.Email); - - if (createStatus == MembershipCreateStatus.Success) - { - this.FormsAuthenticationService.SignIn(model.UserName, false /* createPersistentCookie */); - return RedirectToAction("Index", "Home"); - } - - ModelState.AddModelError(string.Empty, AccountValidationErrorMessages.ErrorCodeToString(createStatus)); - } - - // If we got this far, something failed, redisplay form - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - return View(model); - } - - /// - /// Handler for the change password action. - /// - /// The change password view. - [Authorize] - public ActionResult ChangePassword() - { - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - return View(); - } - - /// - /// Handler for the change password post request. - /// - /// The model. - /// The change password success view in case of success. The change password view otherwise. - [Authorize] - [HttpPost] - public ActionResult ChangePassword(ChangePasswordModel model) - { - if (ModelState.IsValid) - { - if (this.MembershipService.ChangePassword(this.User.Identity.Name, model.OldPassword, model.NewPassword)) - { - return RedirectToAction("ChangePasswordSuccess"); - } - - ModelState.AddModelError(string.Empty, "The current password is incorrect or the new password is invalid."); - } - - // If we got this far, something failed, redisplay form - this.ViewData["PasswordLength"] = this.MembershipService.MinPasswordLength; - return View(model); - } - - /// - /// Handles the change password success action - /// - /// The change password success view. - public ActionResult ChangePasswordSuccess() - { - return View(); - } - } -} diff --git a/mvc2/src/SampleApplication/Controllers/HomeController.cs b/mvc2/src/SampleApplication/Controllers/HomeController.cs deleted file mode 100644 index 58bbc30..0000000 --- a/mvc2/src/SampleApplication/Controllers/HomeController.cs +++ /dev/null @@ -1,74 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - using System.Collections.Generic; - using System.ServiceModel.Syndication; - using System.Web.Mvc; - - /// - /// The home controller. - /// - [HandleError] - [LoggingFilter] - public class HomeController : AsyncController - { - /// - /// The data model of the home controller. - /// - private readonly IHomeControllerModel homeControllerModel; - - /// - /// Initializes a new instance of the class. - /// - /// The home controller model. - public HomeController(IHomeControllerModel homeControllerModel) - { - this.homeControllerModel = homeControllerModel; - } - - /// - /// The index action acync begin - /// - public void IndexAsync() - { - } - - /// - /// the index action async end - /// - /// The items. - /// The view shown by the action - public ActionResult IndexCompleted(IEnumerable items) - { - ViewData["Message"] = this.homeControllerModel.WelcomeMessage; - return View(); - } - - /// - /// The about action handler - /// - /// The view shown by the about action. - public ActionResult About() - { - return View(); - } - } -} diff --git a/mvc2/src/SampleApplication/Controllers/HomeControllerModel.cs b/mvc2/src/SampleApplication/Controllers/HomeControllerModel.cs deleted file mode 100644 index dc5fd18..0000000 --- a/mvc2/src/SampleApplication/Controllers/HomeControllerModel.cs +++ /dev/null @@ -1,39 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - /// - /// The data model of the home controller - /// - public class HomeControllerModel : IHomeControllerModel - { - /// - /// Gets the welcome message. - /// - /// The welcome message. - public string WelcomeMessage - { - get - { - return "Welcome to MVC"; - } - } - } -} \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Controllers/IHomeControllerModel.cs b/mvc2/src/SampleApplication/Controllers/IHomeControllerModel.cs deleted file mode 100644 index fd81eef..0000000 --- a/mvc2/src/SampleApplication/Controllers/IHomeControllerModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - /// - /// The data model of the home controller - /// - public interface IHomeControllerModel - { - /// - /// Gets the welcome message. - /// - /// The welcome message. - string WelcomeMessage { get; } - } -} \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Controllers/LoggingFilterAttribute.cs b/mvc2/src/SampleApplication/Controllers/LoggingFilterAttribute.cs deleted file mode 100644 index b170c96..0000000 --- a/mvc2/src/SampleApplication/Controllers/LoggingFilterAttribute.cs +++ /dev/null @@ -1,57 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Controllers -{ - using System.Globalization; - using System.Web.Mvc; - using log4net; - using Ninject; - - /// - /// Filter attribute that logs the action. - /// - public class LoggingFilterAttribute : ActionFilterAttribute - { - /// - /// Gets or sets the logger that is used to log. - /// - /// The logger that is used to log. - [Inject] - public ILog Log { get; set; } - - /// - /// Called by the MVC framework before the action method executes. - /// - /// The filter context. - public override void OnActionExecuting(ActionExecutingContext filterContext) - { - this.Log.Info(string.Format(CultureInfo.InvariantCulture, "Executing: {0}", filterContext.ActionDescriptor.ActionName)); - } - - /// - /// Called by the MVC framework after the action method executes. - /// - /// The filter context. - public override void OnActionExecuted(ActionExecutedContext filterContext) - { - this.Log.Info(string.Format(CultureInfo.InvariantCulture, "Executed: {0}", filterContext.ActionDescriptor.ActionName)); - } - } -} \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Global.asax b/mvc2/src/SampleApplication/Global.asax deleted file mode 100644 index ccb653f..0000000 --- a/mvc2/src/SampleApplication/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="SampleApplication.MvcApplication" Language="C#" %> diff --git a/mvc2/src/SampleApplication/Global.asax.cs b/mvc2/src/SampleApplication/Global.asax.cs deleted file mode 100644 index 01d870a..0000000 --- a/mvc2/src/SampleApplication/Global.asax.cs +++ /dev/null @@ -1,75 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication -{ - using System.Reflection; - using System.Web.Mvc; - using System.Web.Routing; - using log4net; - using Ninject; - using Ninject.Web.Common; - using SampleApplication.Controllers; - - // Note: For instructions on enabling IIS6 or IIS7 classic mode, - // visit http://go.microsoft.com/?LinkId=9394801 - - /// - /// The application main class - /// - public class MvcApplication : NinjectHttpApplication - { - /// - /// Registers the routes. - /// - /// The routes. - public static void RegisterRoutes(RouteCollection routes) - { - routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); - - routes.MapRoute( - "Default", // Route name - "{controller}/{action}/{id}", // URL with parameters - new { controller = "Home", action = "Index", id = UrlParameter.Optional }); - } - - /// - /// Called when the application is started. - /// - protected override void OnApplicationStarted() - { - AreaRegistration.RegisterAllAreas(); - - RegisterRoutes(RouteTable.Routes); - } - - /// - /// Creates the kernel that will manage your application. - /// - /// The created kernel. - protected override IKernel CreateKernel() - { - var kernel = new StandardKernel(); - kernel.Bind().To(); - kernel.Bind().ToMethod(ctx => LogManager.GetLogger("xxx")); - kernel.Load(Assembly.GetExecutingAssembly()); - return kernel; - } - } -} \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Models/Account/CompareAttribute.cs b/mvc2/src/SampleApplication/Models/Account/CompareAttribute.cs deleted file mode 100644 index 62fa170..0000000 --- a/mvc2/src/SampleApplication/Models/Account/CompareAttribute.cs +++ /dev/null @@ -1,95 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Models.Account -{ - using System; - using System.ComponentModel.DataAnnotations; - using System.Globalization; - - /// - /// Attribute to compare two properties. - /// - [AttributeUsage(AttributeTargets.Property, AllowMultiple = true, Inherited = true)] - public sealed class CompareAttribute : ValidationAttribute - { - /// - /// The default error message - /// - private const string DefaultErrorMessage = "'{0}' and '{1}' do not match."; - - /// - /// The id of this validator - /// - private readonly object typeId = new object(); - - /// - /// Initializes a new instance of the class. - /// - /// The confirm property name. - public CompareAttribute(string confirmProperty) - : base(DefaultErrorMessage) - { - this.ConfirmProperty = confirmProperty; - } - - /// - /// Gets the confirm property. - /// - /// The confirm property. - public string ConfirmProperty { get; private set; } - - /// - /// When implemented in a derived class, gets a unique identifier for this . - /// - /// - /// An that is a unique identifier for the attribute. - public override object TypeId - { - get - { - return this.typeId; - } - } - - /// - /// Applies formatting to an error message, based on the data field where the error occurred. - /// - /// The name to include in the formatted message. - /// - /// An instance of the formatted error message. - /// - public override string FormatErrorMessage(string name) - { - return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, this.ConfirmProperty); - } - - /// - /// Determines whether the specified value is valid. - /// - /// The value. - /// The context. - /// true if the validation is succesful; false otherwise. - protected override ValidationResult IsValid(object value, ValidationContext context) - { - var confirmValue = context.ObjectType.GetProperty(this.ConfirmProperty).GetValue(context.ObjectInstance, null); - return !Equals(value, confirmValue) ? new ValidationResult(this.FormatErrorMessage(context.DisplayName)) : null; - } - } -} \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Models/Account/ValidatePasswordLengthAttribute.cs b/mvc2/src/SampleApplication/Models/Account/ValidatePasswordLengthAttribute.cs deleted file mode 100644 index bcc90f3..0000000 --- a/mvc2/src/SampleApplication/Models/Account/ValidatePasswordLengthAttribute.cs +++ /dev/null @@ -1,76 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Models.Account -{ - using System; - using System.ComponentModel.DataAnnotations; - using System.Globalization; - using System.Web.Security; - - /// - /// Attribute to validate the password length. - /// - [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)] - public sealed class ValidatePasswordLengthAttribute : ValidationAttribute - { - /// - /// The default error message - /// - private const string DefaultErrorMessage = "'{0}' must be at least {1} characters long."; - - /// - /// The minimum number of characters for the password. - /// - private readonly int minimumCharacterCount = Membership.Provider.MinRequiredPasswordLength; - - /// - /// Initializes a new instance of the class. - /// - public ValidatePasswordLengthAttribute() - : base(DefaultErrorMessage) - { - } - - /// - /// Applies formatting to an error message, based on the data field where the error occurred. - /// - /// The name to include in the formatted message. - /// - /// An instance of the formatted error message. - /// - public override string FormatErrorMessage(string name) - { - return String.Format(CultureInfo.CurrentCulture, ErrorMessageString, name, this.minimumCharacterCount); - } - - /// - /// Determines whether the specified value of the object is valid. - /// - /// The value of the object to validate. - /// - /// true if the specified value is valid; otherwise, false. - /// - public override bool IsValid(object value) - { - var valueAsString = value as string; - return valueAsString != null && valueAsString.Length >= this.minimumCharacterCount; - } - } -} \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Properties/AssemblyInfo.cs b/mvc2/src/SampleApplication/Properties/AssemblyInfo.cs deleted file mode 100644 index c220396..0000000 --- a/mvc2/src/SampleApplication/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,53 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -using System.Reflection; -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("SampleApplication")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("SampleApplication")] -[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] -[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("e326ee1f-ed54-4a4f-92df-a8e4545cd599")] - -// 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")] diff --git a/mvc2/src/SampleApplication/SampleApplication.csproj b/mvc2/src/SampleApplication/SampleApplication.csproj deleted file mode 100644 index d550fa3..0000000 --- a/mvc2/src/SampleApplication/SampleApplication.csproj +++ /dev/null @@ -1,178 +0,0 @@ - - - - Debug - AnyCPU - - - 2.0 - {2C7E7472-9B7D-4D71-A7FA-2CE77A44B3F2} - {F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - SampleApplication - SampleApplication - v4.0 - false - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - - ..\..\..\lib\log4net\net-3.5\log4net.dll - - - - ..\..\..\lib\Ninject\net-3.5\Ninject.dll - - - False - ..\..\..\lib\Ninject.Web.Common\net-3.5\Ninject.Web.Common.dll - - - - - - - - - - 3.5 - - - 3.5 - - - 3.5 - - - - 3.5 - - - - 3.5 - - - - - - - - - - - - - - - - - - Global.asax - - - - - - - - - - - - - - - - - - - - Web.config - - - Web.config - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {82222179-0EB8-4C43-AD48-6EA388349C64} - Ninject.Web.Mvc - - - - - - - - - - - - - - - - False - True - 53367 - / - - - False - False - - - False - - - - - \ No newline at end of file diff --git a/mvc2/src/SampleApplication/Scripts/MicrosoftAjax.debug.js b/mvc2/src/SampleApplication/Scripts/MicrosoftAjax.debug.js deleted file mode 100644 index a5f7942..0000000 --- a/mvc2/src/SampleApplication/Scripts/MicrosoftAjax.debug.js +++ /dev/null @@ -1,7117 +0,0 @@ -// 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/mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.debug.js b/mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.debug.js deleted file mode 100644 index 9896f90..0000000 --- a/mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.debug.js +++ /dev/null @@ -1,881 +0,0 @@ -//!---------------------------------------------------------- -//! 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]; - 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['minimum']; - var max = rule.ValidationParameters['maximum']; - 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['minimumLength']; - var maxLength = rule.ValidationParameters['maximumLength']; - 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), stringLength: Function.createDelegate(null, Sys.Mvc.StringLengthValidator.create), regularExpression: 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/mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.js b/mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.js deleted file mode 100644 index 2d1789d..0000000 --- a/mvc2/src/SampleApplication/Scripts/MicrosoftMvcValidation.js +++ /dev/null @@ -1,55 +0,0 @@ -//---------------------------------------------------------- -// 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['minimum'];var $1=rule.ValidationParameters['maximum'];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['minimumLength'];var $1=rule.ValidationParameters['maximumLength'];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),stringLength:Function.createDelegate(null,Sys.Mvc.StringLengthValidator.create),regularExpression: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/mvc2/src/SampleApplication/Scripts/jquery-1.4.1-vsdoc.js b/mvc2/src/SampleApplication/Scripts/jquery-1.4.1-vsdoc.js deleted file mode 100644 index 681241d..0000000 --- a/mvc2/src/SampleApplication/Scripts/jquery-1.4.1-vsdoc.js +++ /dev/null @@ -1,8061 +0,0 @@ -/* - * This file has been commented 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.4.1a - */ - -/*! - * jQuery JavaScript Library v1.4.1 - * 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, BSD, and GPL Licenses. - * - * Date: Mon Jan 25 19:43:33 2010 -0500 - */ - -(function( window, undefined ) { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - /// - /// 1: $(expression, context) - This function accepts a string containing a CSS selector which is then used to match a set of elements. - /// 2: $(html) - Create DOM elements on-the-fly from the provided String of raw HTML. - /// 3: $(elements) - Wrap jQuery functionality around a single or multiple DOM Element(s). - /// 4: $(callback) - A shorthand for $(document).ready(). - /// 5: $() - As of jQuery 1.4, if you pass no arguments in to the jQuery() method, an empty jQuery set will be returned. - /// - /// - /// 1: expression - An expression to search with. - /// 2: html - A string of HTML to create on the fly. - /// 3: elements - DOM element(s) to be encapsulated by a jQuery object. - /// 4: callback - The function to execute when the DOM is ready. - /// - /// - /// 1: context - 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 ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/, - - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - - // Used for trimming whitespace - rtrim = /^(\s|\u00A0)+|(\s|\u00A0)+$/g, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // Has the ready events already been bound? - readyBound = false, - - // The functions to execute on DOM ready - readyList = [], - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwnProperty = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - indexOf = Array.prototype.indexOf; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - - 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; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - 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] ) { - 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 = buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; - } - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - if ( elem ) { - // 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: $("TAG") - } else if ( !context && /^\w+$/.test( selector ) ) { - this.selector = selector; - this.context = document; - selector = document.getElementsByTagName( selector ); - - // 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 jQuery( 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.isArray( selector ) ? - this.setArray( selector ) : - jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.4.1", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - /// - /// The number of elements currently matched. - /// Part of Core - /// - /// - - return this.length; - }, - - toArray: function() { - /// - /// Retrieve all the DOM elements contained in the jQuery set, as an array. - /// - /// - 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 ) { - /// - /// Access a single matched element. num is used to access the - /// Nth element matched. - /// Part of Core - /// - /// - /// - /// Access the element in the Nth position. - /// - - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - /// - /// Set the jQuery object to an array of elements, while maintaining - /// the stack. - /// Part of Core - /// - /// - /// - /// An array of elements - /// - - // Build a new jQuery matched element set - var ret = jQuery( elems || null ); - - // 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; - }, - - // Force the current matched set of elements to become - // the specified array of elements (destroying the stack in the process) - // You should use pushStack() in order to do this, but maintain the stack - setArray: function( elems ) { - /// - /// Set the jQuery object to an array of elements. This operation is - /// completely destructive - be sure to use .pushStack() if you wish to maintain - /// the jQuery stack. - /// Part of Core - /// - /// - /// - /// An array of elements - /// - - // Resetting the length to 0, then using the native Array push - // is a super-fast way to populate an object with array-like properties - this.length = 0; - push.apply( this, elems ); - - return this; - }, - - // 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 ) { - /// - /// Execute a function within the context of every matched element. - /// This means that every time the passed-in function is executed - /// (which is once for every element matched) the 'this' keyword - /// points to the specific element. - /// Additionally, the function, when executed, is passed a single - /// argument representing the position of the element in the matched - /// set. - /// Part of Core - /// - /// - /// - /// A function to execute - /// - - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - /// - /// Binds a function to be executed whenever the DOM is ready to be traversed and manipulated. - /// - /// The function to be executed when the DOM is ready. - - // Attach the listeners - jQuery.bindReady(); - - // If the DOM is already ready - if ( jQuery.isReady ) { - // Execute the function immediately - fn.call( document, jQuery ); - - // Otherwise, remember the function for later - } else if ( readyList ) { - // Add the function to the wait list - readyList.push( fn ); - } - - return this; - }, - - eq: function( i ) { - /// - /// Reduce the set of matched elements to a single element. - /// The position of the element in the set of matched elements - /// starts at 0 and goes to length - 1. - /// Part of Core - /// - /// - /// - /// pos The index of the element that you wish to limit to. - /// - - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - /// - /// Reduce the set of matched elements to the first in the set. - /// - /// - - return this.eq( 0 ); - }, - - last: function() { - /// - /// Reduce the set of matched elements to the final one in the set. - /// - /// - - return this.eq( -1 ); - }, - - slice: function() { - /// - /// Selects a subset of the matched elements. Behaves exactly like the built-in Array slice method. - /// - /// Where to start the subset (0-based). - /// Where to end the subset (not including the end element itself). - /// If omitted, ends at the end of the selection - /// The sliced elements - - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - /// - /// This member is internal. - /// - /// - /// - - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - /// - /// End the most recent 'destructive' operation, reverting the list of matched elements - /// back to its previous state. After an end operation, the list of matched elements will - /// revert to the last state of matched elements. - /// If there was no destructive operation before, an empty set is returned. - /// Part of DOM/Traversing - /// - /// - - return this.prevObject || jQuery(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() { - /// - /// Extend one object with one or more others, returning the original, - /// modified, object. This is a great utility for simple inheritance. - /// jQuery.extend(settings, options); - /// var settings = jQuery.extend({}, defaults, options); - /// Part of JavaScript - /// - /// - /// The object to extend - /// - /// - /// The object that will be merged into the first. - /// - /// - /// (optional) More objects to merge into the first - /// - /// - - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy; - - // 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 object literal values or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || jQuery.isArray(copy) ) ) { - var clone = src && ( jQuery.isPlainObject(src) || jQuery.isArray(src) ) ? src - : jQuery.isArray(copy) ? [] : {}; - - // 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 ) { - /// - /// Run this function to give control of the $ variable back - /// to whichever library first implemented it. This helps to make - /// sure that jQuery doesn't conflict with the $ object - /// of other libraries. - /// By using this function, you will only be able to access jQuery - /// using the 'jQuery' variable. For example, where you used to do - /// $("div p"), you now must do jQuery("div p"). - /// Part of Core - /// - /// - - window.$ = _$; - - if ( deep ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // Handle when the DOM is ready - ready: function() { - /// - /// This method is internal. - /// - /// - - // Make sure that the DOM is not already loaded - if ( !jQuery.isReady ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 13 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If there are functions bound, to execute - if ( readyList ) { - // Execute all of them - var fn, i = 0; - while ( (fn = readyList[ i++ ]) ) { - fn.call( document, jQuery ); - } - - // Reset the list of functions - readyList = null; - } - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyBound ) { - return; - } - - readyBound = true; - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - return jQuery.ready(); - } - - // 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 ) { - /// - /// Determines if the parameter passed is a function. - /// - /// The object to check - /// True if the parameter is a function; otherwise false. - - return toString.call(obj) === "[object Function]"; - }, - - isArray: function( obj ) { - /// - /// Determine if the parameter passed is an array. - /// - /// Object to test whether or not it is an array. - /// True if the parameter is a function; otherwise false. - - return toString.call(obj) === "[object Array]"; - }, - - 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 || toString.call(obj) !== "[object Object]" || obj.nodeType || obj.setInterval ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor - && !hasOwnProperty.call(obj, "constructor") - && !hasOwnProperty.call(obj.constructor.prototype, "isPrototypeOf") ) { - 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 || hasOwnProperty.call( obj, key ); - }, - - 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; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@") - .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]") - .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); - - } else { - jQuery.error( "Invalid JSON: " + data ); - } - }, - - noop: function() { - /// - /// An empty function. - /// - /// - }, - - // Evalulates a script in a global context - globalEval: function( data ) { - /// - /// Internally evaluates a script in a global context. - /// - /// - - if ( data && rnotwhite.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - - if ( jQuery.support.scriptEval ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = data; - } - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - /// - /// Checks whether the specified element has the specified DOM node name. - /// - /// The element to examine - /// The node name to check - /// True if the specified node name matches the node's DOM node name; otherwise false - - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - /// - /// A generic iterator function, which can be used to seemlessly - /// iterate over both objects and arrays. This function is not the same - /// as $().each() - which is used to iterate, exclusively, over a jQuery - /// object. This function can be used to iterate over anything. - /// The callback has two arguments:the key (objects) or index (arrays) as first - /// the first, and the value as the second. - /// Part of JavaScript - /// - /// - /// 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 ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} - } - } - - return object; - }, - - trim: function( text ) { - /// - /// Remove the whitespace from the beginning and end of a string. - /// Part of JavaScript - /// - /// - /// - /// The string to trim. - /// - - return (text || "").replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - /// - /// Turns anything into a true array. This is an internal method. - /// - /// Anything to turn into an actual Array - /// - /// - - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - if ( array.length == null || typeof array === "string" || jQuery.isFunction(array) || (typeof array !== "function" && array.setInterval) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - /// - /// Merge two arrays together, removing all duplicates. - /// The new array is: All the results from the first array, followed - /// by the unique results from the second array. - /// Part of JavaScript - /// - /// - /// - /// The first array to merge. - /// - /// - /// The second array to merge. - /// - - 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 ) { - /// - /// Filter items out of an array, by using a filter function. - /// The specified function will be passed two arguments: The - /// current array item and the index of the item in the array. The - /// function must return 'true' to keep the item in the array, - /// false to remove it. - /// }); - /// Part of JavaScript - /// - /// - /// - /// array The Array to find items in. - /// - /// - /// The function to process each item against. - /// - /// - /// Invert the selection - select the opposite of the function. - /// - - var ret = []; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - if ( !inv !== !callback( elems[ i ], i ) ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - /// - /// Translate all items in an array to another array of items. - /// The translation function that is provided to this method is - /// called for each item in the array and is passed one argument: - /// The item to be translated. - /// The function can then return the translated value, 'null' - /// (to remove the item), or an array of values - which will - /// be flattened into the full array. - /// Part of JavaScript - /// - /// - /// - /// array The Array to translate. - /// - /// - /// The function to process each item against. - /// - - var ret = [], value; - - // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - proxy: function( fn, proxy, thisObject ) { - /// - /// Takes a function and returns a new one that will always have a particular scope. - /// - /// - /// The function whose scope will be changed. - /// - /// - /// The object to which the scope of the function should be set. - /// - /// - - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; - - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } - } - - if ( !proxy && fn ) { - proxy = function() { - return fn.apply( thisObject || this, arguments ); - }; - } - - // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } - - // So proxy can be declared as an argument - return proxy; - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = /(webkit)[ \/]([\w.]+)/.exec( ua ) || - /(opera)(?:.*version)?[ \/]([\w.]+)/.exec( ua ) || - /(msie) ([\w.]+)/.exec( ua ) || - !/compatible/.test( ua ) && /(mozilla)(?:.*? rv:([\w.]+))?/.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - browser: {} -}); - -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; -} - -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - /// - /// Determines the index of the first parameter in the array. - /// - /// The value to see if it exists in the array. - /// The array to look through for the value - /// The 0-based index of the item if it was found, otherwise -1. - - return indexOf.call( array, elem ); - }; -} - -// 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( error ) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -function evalScript( i, elem ) { - /// - /// This method is internal. - /// - /// - - if ( elem.src ) { - jQuery.ajax({ - url: elem.src, - async: false, - dataType: "script" - }); - } else { - jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); - } - - if ( elem.parentNode ) { - elem.parentNode.removeChild( elem ); - } -} - -// Mutifunctional method to get and set values to a collection -// The value/s can be optionally by executed if its a function -function access( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : null; -} - -function now() { - /// - /// Gets the current date. - /// - /// The current date. - - return (new Date).getTime(); -} - -// [vsdoc] The following function has been modified for IntelliSense. -// [vsdoc] Stubbing support properties to "false" for IntelliSense compat. -(function() { - - jQuery.support = {}; - - // var root = document.documentElement, - // script = document.createElement("script"), - // div = document.createElement("div"), - // id = "script" + now(); - - // div.style.display = "none"; - // div.innerHTML = "
    a"; - - // var all = div.getElementsByTagName("*"), - // a = div.getElementsByTagName("a")[0]; - - // // Can't get basic test support - // if ( !all || !all.length || !a ) { - // return; - // } - - jQuery.support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: false, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: false, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: false, - - // Get the style information from getAttribute - // (IE uses .cssText insted) - style: false, - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: false, - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: false, - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: false, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: false, - - // 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: false, - - // Will be defined later - checkClone: false, - scriptEval: false, - noCloneEvent: false, - boxModel: false - }; - - // script.type = "text/javascript"; - // try { - // script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - // } catch(e) {} - - // root.insertBefore( script, root.firstChild ); - - // // Make sure that the execution of code works by injecting a script - // // tag with appendChild/createTextNode - // // (IE doesn't support this, fails, and uses .text instead) - // if ( window[ id ] ) { - // jQuery.support.scriptEval = true; - // delete window[ id ]; - // } - - // root.removeChild( script ); - - // if ( div.attachEvent && div.fireEvent ) { - // div.attachEvent("onclick", function click() { - // // Cloning a node shouldn't copy over any - // // bound event handlers (IE does this) - // jQuery.support.noCloneEvent = false; - // div.detachEvent("onclick", click); - // }); - // div.cloneNode(true).fireEvent("onclick"); - // } - - // div = document.createElement("div"); - // div.innerHTML = ""; - - // var fragment = document.createDocumentFragment(); - // fragment.appendChild( div.firstChild ); - - // // WebKit doesn't clone checked state correctly in fragments - // jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; - - // // Figure out if the W3C box model works as expected - // // document.body must exist before we can do this - // jQuery(function() { - // var div = document.createElement("div"); - // div.style.width = div.style.paddingLeft = "1px"; - - // document.body.appendChild( div ); - // jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - // document.body.removeChild( div ).style.display = 'none'; - // div = null; - // }); - - // // Technique from Juriy Zaytsev - // // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - // var eventSupported = function( eventName ) { - // var el = document.createElement("div"); - // eventName = "on" + eventName; - - // var isSupported = (eventName in el); - // if ( !isSupported ) { - // el.setAttribute(eventName, "return;"); - // isSupported = typeof el[eventName] === "function"; - // } - // el = null; - - // return isSupported; - // }; - - jQuery.support.submitBubbles = false; - jQuery.support.changeBubbles = false; - - // // release memory in IE - // root = script = div = all = a = null; -})(); - -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; -var expando = "jQuery" + now(), uuid = 0, windowData = {}; -var emptyObject = {}; - -jQuery.extend({ - cache: {}, - - expando:expando, - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - "object": true, - "applet": true - }, - - data: function( elem, name, data ) { - /// - /// Store arbitrary data associated with the specified element. - /// - /// - /// The DOM element to associate with the data. - /// - /// - /// A string naming the piece of data to set. - /// - /// - /// The new data value. - /// - /// - - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ], cache = jQuery.cache, thisCache; - - // Handle the case where there's no name immediately - if ( !name && !id ) { - return null; - } - - // Compute a unique ID for the element - if ( !id ) { - id = ++uuid; - } - - // Avoid generating a new cache unless none exists and we - // want to manipulate it. - if ( typeof name === "object" ) { - elem[ expando ] = id; - thisCache = cache[ id ] = jQuery.extend(true, {}, name); - } else if ( cache[ id ] ) { - thisCache = cache[ id ]; - } else if ( typeof data === "undefined" ) { - thisCache = emptyObject; - } else { - thisCache = cache[ id ] = {}; - } - - // Prevent overriding the named cache with undefined values - if ( data !== undefined ) { - elem[ expando ] = id; - thisCache[ name ] = data; - } - - return typeof name === "string" ? thisCache[ name ] : thisCache; - }, - - removeData: function( elem, name ) { - if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var id = elem[ expando ], cache = jQuery.cache, thisCache = cache[ id ]; - - // If we want to remove a specific section of the element's data - if ( name ) { - if ( thisCache ) { - // Remove the section of cache data - delete thisCache[ name ]; - - // If we've removed all the data, remove the element's cache - if ( jQuery.isEmptyObject(thisCache) ) { - jQuery.removeData( elem ); - } - } - - // Otherwise, we want to remove all of the element's data - } else { - // Clean up the element expando - try { - delete elem[ expando ]; - } catch( e ) { - // IE has trouble directly removing the expando - // but it's ok with using removeAttribute - if ( elem.removeAttribute ) { - elem.removeAttribute( expando ); - } - } - - // Completely remove the data cache - delete cache[ id ]; - } - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - /// - /// Store arbitrary data associated with the matched elements. - /// - /// - /// A string naming the piece of data to set. - /// - /// - /// The new data value. - /// - /// - - if ( typeof key === "undefined" && this.length ) { - return jQuery.data( this[0] ); - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - } - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - } else { - return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function() { - jQuery.data( this, key, value ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); -jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; - } - - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { - return q || []; - } - - 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(); - - // 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"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - /// - /// 1: queue() - Returns a reference to the first element's queue (which is an array of functions). - /// 2: queue(callback) - Adds a new function, to be executed, onto the end of the queue of all matched elements. - /// 3: queue(queue) - Replaces the queue of all matched element with this new queue (the array of functions). - /// - /// The function to add to the queue. - /// - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function( i, elem ) { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - /// - /// Removes a queued function from the front of the queue and executes it. - /// - /// The type of queue to access. - /// - - 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 ) { - /// - /// 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() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - - 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", [] ); - } -}); -var rclass = /[\n\t]/g, - rspace = /\s+/, - rreturn = /\r/g, - rspecialurl = /href|src|style/, - rtype = /(button|input)/i, - rfocusable = /(button|input|object|select|textarea)/i, - rclickable = /^(a|area)$/i, - rradiocheck = /radio|checkbox/; - -jQuery.fn.extend({ - attr: function( name, value ) { - /// - /// Set a single property to a computed value, on all matched elements. - /// Instead of a value, a function is provided, that computes the value. - /// Part of DOM/Attributes - /// - /// - /// - /// The name of the property to set. - /// - /// - /// A function returning the value to set. - /// - - return access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name, fn ) { - /// - /// Remove an attribute from each of the matched elements. - /// Part of DOM/Attributes - /// - /// - /// An attribute to remove. - /// - /// - - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } - }); - }, - - addClass: function( value ) { - /// - /// Adds the specified class(es) to each of the set of matched elements. - /// Part of DOM/Attributes - /// - /// - /// One or more class names to be added to the class attribute of each matched element. - /// - /// - - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspace ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className ) { - elem.className = value; - - } else { - var className = " " + elem.className + " "; - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - elem.className += " " + classNames[c]; - } - } - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - /// - /// Removes all or the specified class(es) from the set of matched elements. - /// Part of DOM/Attributes - /// - /// - /// (Optional) A class name to be removed from the class attribute of each matched element. - /// - /// - - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split(rspace); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); - } - elem.className = className.substring(1, className.length - 1); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - /// - /// Add or remove a class from each element in the set of matched elements, depending - /// on either the class's presence or the value of the switch argument. - /// - /// - /// A class name to be toggled for each element in the matched set. - /// - /// - /// A boolean 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) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), 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 ) { - /// - /// Checks the current selection against a class and returns whether at least one selection has a given class. - /// - /// The class to check against - /// True if at least one element in the selection has the class, otherwise false. - - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - /// - /// Set the value of every matched element. - /// Part of DOM/Attributes - /// - /// - /// - /// A string of text or an array of strings to set as the value property of each - /// matched element. - /// - - if ( value === undefined ) { - var elem = this[0]; - - if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - return (elem.attributes.value || {}).specified ? elem.value : elem.text; - } - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var 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 - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - if ( option.selected ) { - // Get the specifc 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 ); - } - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - } - - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); - - } - - return undefined; - } - - var isFunction = jQuery.isFunction(value); - - return this.each(function(i) { - var self = jQuery(this), val = value; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call(this, i, self.val()); - } - - // Typecast each time if the value is a Function and the appended - // value is therefore different each time. - if ( typeof val === "number" ) { - val += ""; - } - - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; - - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - this.selectedIndex = -1; - } - - } else { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - /// - /// This method is internal. - /// - /// - - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); - } - - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; - - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; - - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); - - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - - // If applicable, access the attribute via the DOM 0 way - if ( name in elem && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } - - elem[ name ] = value; - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // 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/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; - } - - // elem is actually elem.style ... set the style - // Using attr for specific style information is now deprecated. Use style insead. - return jQuery.style( elem, name, value ); - } -}); -var fcleanup = function( nm ) { - return nm.replace(/[^\w\s\.\|`]/g, function( ch ) { - return "\\" + ch; - }); -}; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - /// - /// This method is internal. - /// - /// - - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( elem.setInterval && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // if data is passed, bind to handler - if ( data !== undefined ) { - // Create temporary function pointer to original handler - var fn = handler; - - // Create unique handler function, wrapped around original handler - handler = jQuery.proxy( fn ); - - // Store data in unique handler - handler.data = data; - } - - // Init the element's event structure - var events = jQuery.data( elem, "events" ) || jQuery.data( elem, "events", {} ), - handle = jQuery.data( elem, "handle" ), eventHandle; - - if ( !handle ) { - eventHandle = function() { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && !jQuery.event.triggered ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - - handle = jQuery.data( elem, "handle", eventHandle ); - } - - // If no handle is found then we must be trying to bind to one of the - // banned noData elements - if ( !handle ) { - return; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native - // event in IE. - handle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split( /\s+/ ); - - var type, i = 0; - - while ( (type = types[ i++ ]) ) { - // Namespaced event handlers - var namespaces = type.split("."); - type = namespaces.shift(); - - if ( i > 1 ) { - handler = jQuery.proxy( handler ); - - if ( data !== undefined ) { - handler.data = data; - } - } - - handler.type = namespaces.slice(0).sort().join("."); - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = this.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = {}; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, handler) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, handle, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, handle ); - } - } - } - - if ( special.add ) { - var modifiedHandler = special.add.call( elem, handler, data, namespaces, handlers ); - if ( modifiedHandler && jQuery.isFunction( modifiedHandler ) ) { - modifiedHandler.guid = modifiedHandler.guid || handler.guid; - modifiedHandler.data = modifiedHandler.data || handler.data; - modifiedHandler.type = modifiedHandler.type || handler.type; - handler = modifiedHandler; - } - } - - // Add the function to the element's handler list - handlers[ handler.guid ] = handler; - - // Keep track of which events have been used, for global triggering - this.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 ) { - /// - /// This method is internal. - /// - /// - - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - var events = jQuery.data( elem, "events" ), ret, type, fn; - - if ( events ) { - // Unbind all events for the element - if ( types === undefined || (typeof types === "string" && types.charAt(0) === ".") ) { - for ( type in events ) { - this.remove( elem, type + (types || "") ); - } - } else { - // types is actually an event object here - if ( types.type ) { - handler = types.handler; - types = types.type; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(/\s+/); - var i = 0; - while ( (type = types[ i++ ]) ) { - // Namespaced event handlers - var namespaces = type.split("."); - type = namespaces.shift(); - var all = !namespaces.length, - cleaned = jQuery.map( namespaces.slice(0).sort(), fcleanup ), - namespace = new RegExp("(^|\\.)" + cleaned.join("\\.(?:.*\\.)?") + "(\\.|$)"), - special = this.special[ type ] || {}; - - if ( events[ type ] ) { - // remove the given handler for the given type - if ( handler ) { - fn = events[ type ][ handler.guid ]; - delete events[ type ][ handler.guid ]; - - // remove all handlers for the given type - } else { - for ( var handle in events[ type ] ) { - // Handle the removal of namespaced events - if ( all || namespace.test( events[ type ][ handle ].type ) ) { - delete events[ type ][ handle ]; - } - } - } - - if ( special.remove ) { - special.remove.call( elem, namespaces, fn); - } - - // remove generic event handler if no more handlers exist - for ( ret in events[ type ] ) { - break; - } - if ( !ret ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, jQuery.data( elem, "handle" ), false ); - } else if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, jQuery.data( elem, "handle" ) ); - } - } - ret = null; - delete events[ type ]; - } - } - } - } - - // Remove the expando if it's no longer used - for ( ret in events ) { - break; - } - if ( !ret ) { - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.elem = null; - } - jQuery.removeData( elem, "events" ); - jQuery.removeData( elem, "handle" ); - } - } - }, - - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { - /// - /// This method is internal. - /// - /// - - // Event object or event type - var type = event.type || event, - bubbling = arguments[3]; - - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[expando] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); - - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } - - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( this.global[ type ] ) { - jQuery.each( jQuery.cache, function() { - if ( this.events && this.events[type] ) { - jQuery.event.trigger( event, data, this.handle.elem ); - } - }); - } - } - - // Handle triggering a single element - - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // Clean up in case it is reused - event.result = undefined; - event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); - } - - event.currentTarget = elem; - - // Trigger the event, it is assumed that "handle" is a function - var handle = jQuery.data( elem, "handle" ); - if ( handle ) { - handle.apply( elem, data ); - } - - var parent = elem.parentNode || elem.ownerDocument; - - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - } - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} - - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); - - } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, - isClick = jQuery.nodeName(target, "a") && type === "click"; - - if ( !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { - try { - if ( target[ type ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + type ]; - - if ( old ) { - target[ "on" + type ] = null; - } - - this.triggered = true; - target[ type ](); - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (e) {} - - if ( old ) { - target[ "on" + type ] = old; - } - - this.triggered = false; - } - } - }, - - handle: function( event ) { - /// - /// This method is internal. - /// - /// - - // returned undefined or false - var all, handlers; - - event = arguments[0] = jQuery.event.fix( event || window.event ); - event.currentTarget = this; - - // Namespaced event handlers - var namespaces = event.type.split("."); - event.type = namespaces.shift(); - - // Cache this now, all = true means, any handler - all = !namespaces.length && !event.exclusive; - - var namespace = new RegExp("(^|\\.)" + namespaces.slice(0).sort().join("\\.(?:.*\\.)?") + "(\\.|$)"); - - handlers = ( jQuery.data(this, "events") || {} )[ event.type ]; - - for ( var j in handlers ) { - var handler = handlers[ j ]; - - // Filter the functions by class - if ( all || namespace.test(handler.type) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handler; - event.data = handler.data; - - var ret = handler.apply( this, arguments ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - - } - } - - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - /// - /// This method is internal. - /// - /// - - if ( event[ expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, body = document.body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) { - event.which = event.charCode || event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( proxy, data, namespaces, live ) { - jQuery.extend( proxy, data || {} ); - - proxy.guid += data.selector + data.live; - data.liveProxy = proxy; - - jQuery.event.add( this, data.live, liveHandler, data ); - - }, - - remove: function( namespaces ) { - if ( namespaces.length ) { - var remove = 0, name = new RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); - - jQuery.each( (jQuery.data(this, "events").live || {}), function() { - if ( name.test(this.type) ) { - remove++; - } - }); - - if ( remove < 1 ) { - jQuery.event.remove( this, namespaces[0], liveHandler ); - } - } - }, - special: {} - }, - beforeunload: { - setup: function( data, namespaces, fn ) { - // We only want to do this special case on windows - if ( this.setInterval ) { - this.onbeforeunload = fn; - } - - return false; - }, - teardown: function( namespaces, fn ) { - if ( this.onbeforeunload === fn ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.Event = function( src ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - // Event type - } else { - this.type = src; - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = now(); - - // Mark it as fixed - this[ 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) - 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 -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; - - // Traverse up the tree - while ( parent && parent !== this ) { - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { - parent = parent.parentNode; - - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { - break; - } - } - - if ( parent !== this ) { - // set the correct event type - event.type = event.data; - - // handle event if we actually just moused on to a non sub-element - jQuery.event.handle.apply( this, arguments ); - } - -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - -jQuery.event.special.submit = { - setup: function( data, namespaces, fn ) { - if ( this.nodeName.toLowerCase() !== "form" ) { - jQuery.event.add(this, "click.specialSubmit." + fn.guid, function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - return trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit." + fn.guid, function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - return trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - remove: function( namespaces, fn ) { - jQuery.event.remove( this, "click.specialSubmit" + (fn ? "."+fn.guid : "") ); - jQuery.event.remove( this, "keypress.specialSubmit" + (fn ? "."+fn.guid : "") ); - } -}; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - -var formElems = /textarea|input|select/i; - -function getVal( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( elem.nodeName.toLowerCase() === "select" ) { - val = elem.selectedIndex; - } - - return val; -} - -function testChange( e ) { - var elem = e.target, data, val; - - if ( !formElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery.data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery.data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - return jQuery.event.trigger( e, arguments[1], elem ); - } -} - -jQuery.event.special.change = { - filters: { - focusout: testChange, - - click: function( e ) { - var elem = e.target, type = elem.type; - - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { - return testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = elem.type; - - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - return testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information/focus[in] is not needed anymore - beforeactivate: function( e ) { - var elem = e.target; - - if ( elem.nodeName.toLowerCase() === "input" && elem.type === "radio" ) { - jQuery.data( elem, "_change_data", getVal(elem) ); - } - } - }, - setup: function( data, namespaces, fn ) { - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange." + fn.guid, changeFilters[type] ); - } - - return formElems.test( this.nodeName ); - }, - remove: function( namespaces, fn ) { - for ( var type in changeFilters ) { - jQuery.event.remove( this, type + ".specialChange" + (fn ? "."+fn.guid : ""), changeFilters[type] ); - } - - return formElems.test( this.nodeName ); - } -}; - -var changeFilters = jQuery.event.special.change.filters; - -} - -function trigger( type, elem, args ) { - args[0].type = type; - return jQuery.event.handle.apply( elem, args ); -} - -// Create "bubbling" focus and blur events -if ( document.addEventListener ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - jQuery.event.special[ fix ] = { - setup: function() { - /// - /// This method is internal. - /// - /// - - this.addEventListener( orig, handler, true ); - }, - teardown: function() { - /// - /// This method is internal. - /// - /// - - this.removeEventListener( orig, handler, true ); - } - }; - - function handler( e ) { - e = jQuery.event.fix( e ); - e.type = fix; - return jQuery.event.handle.call( this, e ); - } - }); -} - -// jQuery.each(["bind", "one"], function( i, name ) { -// jQuery.fn[ name ] = function( type, data, fn ) { -// // Handle object literals -// if ( typeof type === "object" ) { -// for ( var key in type ) { -// this[ name ](key, data, type[key], fn); -// } -// return this; -// } -// -// if ( jQuery.isFunction( data ) ) { -// fn = data; -// data = undefined; -// } -// -// var handler = name === "one" ? jQuery.proxy( fn, function( event ) { -// jQuery( this ).unbind( event, handler ); -// return fn.apply( this, arguments ); -// }) : fn; -// -// return type === "unload" && name !== "one" ? -// this.one( type, data, fn ) : -// this.each(function() { -// jQuery.event.add( this, type, handler, data ); -// }); -// }; -// }); - -jQuery.fn[ "bind" ] = function( type, data, fn ) { - /// - /// Binds a handler to one or more events for each matched element. Can also bind custom events. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as event.data - /// A function to bind to the event on each of the set of matched elements. function callback(eventObject) such that this corresponds to the dom element. - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ "bind" ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - var handler = "bind" === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - return type === "unload" && "bind" !== "one" ? - this.one( type, data, fn ) : - this.each(function() { - jQuery.event.add( this, type, handler, data ); - }); -}; - -jQuery.fn[ "one" ] = function( type, data, fn ) { - /// - /// Binds a handler to one or more events to be executed exactly once for each matched element. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as event.data - /// A function to bind to the event on each of the set of matched elements. function callback(eventObject) such that this corresponds to the dom element. - - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ "one" ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - var handler = "one" === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - return type === "unload" && "one" !== "one" ? - this.one( type, data, fn ) : - this.each(function() { - jQuery.event.add( this, type, handler, data ); - }); -}; - -jQuery.fn.extend({ - unbind: function( type, fn ) { - /// - /// Unbinds a handler from one or more events for each matched element. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// A function to bind to the event on each of the set of matched elements. function callback(eventObject) such that this corresponds to the dom element. - - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - return this; - } - - return this.each(function() { - jQuery.event.remove( this, type, fn ); - }); - }, - trigger: function( type, data ) { - /// - /// Triggers a type of event on every matched element. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as additional arguments. - /// This parameter is undocumented. - - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - /// - /// Triggers all bound event handlers on an element for a specific event type without executing the browser's default actions. - /// - /// One or more event types separated by a space. Built-in event type values are: blur, focus, load, resize, scroll, unload, click, dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, mouseenter, mouseleave, change, select, submit, keydown, keypress, keyup, error . - /// Additional data passed to the event handler as additional arguments. - /// This parameter is undocumented. - - if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; - } - }, - - toggle: function( fn ) { - /// - /// Toggles among two or more function calls every other click. - /// - /// The functions among which to toggle execution - - // Save reference to arguments for access in closure - var args = arguments, i = 1; - - // link all the functions, so any of them can unbind this click handler - while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); - } - - return this.click( jQuery.proxy( fn, 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; - })); - }, - - hover: function( fnOver, fnOut ) { - /// - /// Simulates hovering (moving the mouse on or off of an object). - /// - /// The function to fire when the mouse is moved over a matched element. - /// The function to fire when the mouse is moved off of a matched element. - - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -// jQuery.each(["live", "die"], function( i, name ) { -// jQuery.fn[ name ] = function( types, data, fn ) { -// var type, i = 0; -// -// if ( jQuery.isFunction( data ) ) { -// fn = data; -// data = undefined; -// } -// -// types = (types || "").split( /\s+/ ); -// -// while ( (type = types[ i++ ]) != null ) { -// type = type === "focus" ? "focusin" : // focus --> focusin -// type === "blur" ? "focusout" : // blur --> focusout -// type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support -// type; -// -// if ( name === "live" ) { -// // bind live handler -// jQuery( this.context ).bind( liveConvert( type, this.selector ), { -// data: data, selector: this.selector, live: type -// }, fn ); -// -// } else { -// // unbind live handler -// jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); -// } -// } -// -// return this; -// } -// }); - -jQuery.fn[ "live" ] = function( types, data, fn ) { - /// - /// Attach a handler to the event for all elements which match the current selector, now or - /// in the future. - /// - /// - /// A string containing a JavaScript event type, such as "click" or "keydown". - /// - /// - /// A map of data that will be passed to the event handler. - /// - /// - /// A function to execute at the time the event is triggered. - /// - /// - - var type, i = 0; - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split( /\s+/ ); - - while ( (type = types[ i++ ]) != null ) { - type = type === "focus" ? "focusin" : // focus --> focusin - type === "blur" ? "focusout" : // blur --> focusout - type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support - type; - - if ( "live" === "live" ) { - // bind live handler - jQuery( this.context ).bind( liveConvert( type, this.selector ), { - data: data, selector: this.selector, live: type - }, fn ); - - } else { - // unbind live handler - jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); - } - } - - return this; -} - -jQuery.fn[ "die" ] = function( types, data, fn ) { - /// - /// Remove all event handlers previously attached using .live() from the elements. - /// - /// - /// A string containing a JavaScript event type, such as click or keydown. - /// - /// - /// The function that is to be no longer executed. - /// - /// - - var type, i = 0; - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split( /\s+/ ); - - while ( (type = types[ i++ ]) != null ) { - type = type === "focus" ? "focusin" : // focus --> focusin - type === "blur" ? "focusout" : // blur --> focusout - type === "hover" ? types.push("mouseleave") && "mouseenter" : // hover support - type; - - if ( "die" === "live" ) { - // bind live handler - jQuery( this.context ).bind( liveConvert( type, this.selector ), { - data: data, selector: this.selector, live: type - }, fn ); - - } else { - // unbind live handler - jQuery( this.context ).unbind( liveConvert( type, this.selector ), fn ? { guid: fn.guid + this.selector + type } : null ); - } - } - - return this; -} - -function liveHandler( event ) { - var stop, elems = [], selectors = [], args = arguments, - related, match, fn, elem, j, i, l, data, - live = jQuery.extend({}, jQuery.data( this, "events" ).live); - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.button && event.type === "click" ) { - return; - } - - for ( j in live ) { - fn = live[j]; - if ( fn.live === event.type || - fn.altLive && jQuery.inArray(event.type, fn.altLive) > -1 ) { - - data = fn.data; - if ( !(data.beforeFilter && data.beforeFilter[event.type] && - !data.beforeFilter[event.type](event)) ) { - selectors.push( fn.selector ); - } - } else { - delete live[j]; - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - for ( j in live ) { - fn = live[j]; - elem = match[i].elem; - related = null; - - if ( match[i].selector === fn.selector ) { - // Those two events require additional checking - if ( fn.live === "mouseenter" || fn.live === "mouseleave" ) { - related = jQuery( event.relatedTarget ).closest( fn.selector )[0]; - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, fn: fn }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - event.currentTarget = match.elem; - event.data = match.fn.data; - if ( match.fn.apply( match.elem, args ) === false ) { - stop = false; - break; - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return "live." + (type ? type + "." : "") + selector.replace(/\./g, "`").replace(/ /g, "&"); -} - -// 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").split(" "), function( i, name ) { -// -// // Handle event binding -// jQuery.fn[ name ] = function( fn ) { -// return fn ? this.bind( name, fn ) : this.trigger( name ); -// }; -// -// if ( jQuery.attrFn ) { -// jQuery.attrFn[ name ] = true; -// } -// }); - -jQuery.fn[ "blur" ] = function( fn ) { - /// - /// 1: blur() - Triggers the blur event of each matched element. - /// 2: blur(fn) - Binds a function to the blur event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "blur", fn ) : this.trigger( "blur" ); -}; - -jQuery.fn[ "focus" ] = function( fn ) { - /// - /// 1: focus() - Triggers the focus event of each matched element. - /// 2: focus(fn) - Binds a function to the focus event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "focus", fn ) : this.trigger( "focus" ); -}; - -jQuery.fn[ "focusin" ] = function( fn ) { - /// - /// Bind an event handler to the "focusin" JavaScript event. - /// - /// - /// A function to execute each time the event is triggered. - /// - /// - - return fn ? this.bind( "focusin", fn ) : this.trigger( "focusin" ); -}; - -jQuery.fn[ "focusout" ] = function( fn ) { - /// - /// Bind an event handler to the "focusout" JavaScript event. - /// - /// - /// A function to execute each time the event is triggered. - /// - /// - - return fn ? this.bind( "focusout", fn ) : this.trigger( "focusout" ); -}; - -jQuery.fn[ "load" ] = function( fn ) { - /// - /// 1: load() - Triggers the load event of each matched element. - /// 2: load(fn) - Binds a function to the load event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "load", fn ) : this.trigger( "load" ); -}; - -jQuery.fn[ "resize" ] = function( fn ) { - /// - /// 1: resize() - Triggers the resize event of each matched element. - /// 2: resize(fn) - Binds a function to the resize event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "resize", fn ) : this.trigger( "resize" ); -}; - -jQuery.fn[ "scroll" ] = function( fn ) { - /// - /// 1: scroll() - Triggers the scroll event of each matched element. - /// 2: scroll(fn) - Binds a function to the scroll event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "scroll", fn ) : this.trigger( "scroll" ); -}; - -jQuery.fn[ "unload" ] = function( fn ) { - /// - /// 1: unload() - Triggers the unload event of each matched element. - /// 2: unload(fn) - Binds a function to the unload event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "unload", fn ) : this.trigger( "unload" ); -}; - -jQuery.fn[ "click" ] = function( fn ) { - /// - /// 1: click() - Triggers the click event of each matched element. - /// 2: click(fn) - Binds a function to the click event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "click", fn ) : this.trigger( "click" ); -}; - -jQuery.fn[ "dblclick" ] = function( fn ) { - /// - /// 1: dblclick() - Triggers the dblclick event of each matched element. - /// 2: dblclick(fn) - Binds a function to the dblclick event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "dblclick", fn ) : this.trigger( "dblclick" ); -}; - -jQuery.fn[ "mousedown" ] = function( fn ) { - /// - /// Binds a function to the mousedown event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mousedown", fn ) : this.trigger( "mousedown" ); -}; - -jQuery.fn[ "mouseup" ] = function( fn ) { - /// - /// Bind a function to the mouseup event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseup", fn ) : this.trigger( "mouseup" ); -}; - -jQuery.fn[ "mousemove" ] = function( fn ) { - /// - /// Bind a function to the mousemove event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mousemove", fn ) : this.trigger( "mousemove" ); -}; - -jQuery.fn[ "mouseover" ] = function( fn ) { - /// - /// Bind a function to the mouseover event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseover", fn ) : this.trigger( "mouseover" ); -}; - -jQuery.fn[ "mouseout" ] = function( fn ) { - /// - /// Bind a function to the mouseout event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseout", fn ) : this.trigger( "mouseout" ); -}; - -jQuery.fn[ "mouseenter" ] = function( fn ) { - /// - /// Bind a function to the mouseenter event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseenter", fn ) : this.trigger( "mouseenter" ); -}; - -jQuery.fn[ "mouseleave" ] = function( fn ) { - /// - /// Bind a function to the mouseleave event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "mouseleave", fn ) : this.trigger( "mouseleave" ); -}; - -jQuery.fn[ "change" ] = function( fn ) { - /// - /// 1: change() - Triggers the change event of each matched element. - /// 2: change(fn) - Binds a function to the change event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "change", fn ) : this.trigger( "change" ); -}; - -jQuery.fn[ "select" ] = function( fn ) { - /// - /// 1: select() - Triggers the select event of each matched element. - /// 2: select(fn) - Binds a function to the select event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "select", fn ) : this.trigger( "select" ); -}; - -jQuery.fn[ "submit" ] = function( fn ) { - /// - /// 1: submit() - Triggers the submit event of each matched element. - /// 2: submit(fn) - Binds a function to the submit event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "submit", fn ) : this.trigger( "submit" ); -}; - -jQuery.fn[ "keydown" ] = function( fn ) { - /// - /// 1: keydown() - Triggers the keydown event of each matched element. - /// 2: keydown(fn) - Binds a function to the keydown event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "keydown", fn ) : this.trigger( "keydown" ); -}; - -jQuery.fn[ "keypress" ] = function( fn ) { - /// - /// 1: keypress() - Triggers the keypress event of each matched element. - /// 2: keypress(fn) - Binds a function to the keypress event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "keypress", fn ) : this.trigger( "keypress" ); -}; - -jQuery.fn[ "keyup" ] = function( fn ) { - /// - /// 1: keyup() - Triggers the keyup event of each matched element. - /// 2: keyup(fn) - Binds a function to the keyup event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "keyup", fn ) : this.trigger( "keyup" ); -}; - -jQuery.fn[ "error" ] = function( fn ) { - /// - /// 1: error() - Triggers the error event of each matched element. - /// 2: error(fn) - Binds a function to the error event of each matched element. - /// - /// The function to execute. - /// - - return fn ? this.bind( "error", fn ) : this.trigger( "error" ); -}; - -// Prevent memory leaks in IE -// Window isn't included so as not to unbind existing unload events -// More info: -// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ -if ( window.attachEvent && !window.addEventListener ) { - window.attachEvent("onunload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); -} -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true; - -// 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 || []; - var origContext = context = context || document; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var parts = [], m, set, checkSet, extra, prune = true, contextXML = isXML(context), - soFar = selector; - - // Reset the position of the chunker regexp (start from head) - while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - } 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 ); - } - } - } 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]) ) { - var ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; - } - - if ( context ) { - var 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 ) { - var 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 ( var i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - } else { - for ( var 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){ - /// - /// Removes all duplicate elements from an array of elements. - /// - /// The array to translate - /// The array after translation. - - 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.find = function(expr, context, isXML){ - var set, match; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice(1,1); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); - set = Expr.find[ type ]( match, context, isXML ); - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = context.getElementsByTagName("*"); - } - - return {set: set, expr: expr}; -}; - -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && isXML(set[0]); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var filter = Expr.filter[ type ], found, item, 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 ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var 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 "Syntax error, unrecognized expression: " + msg; -}; - -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|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, - 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"); - } - }, - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.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 isPartStr = typeof part === "string"; - - if ( isPartStr && !/\W/.test(part) ) { - part = part.toLowerCase(); - - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - } else { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var 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 doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); - checkFn = dirNodeCheck; - } - - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); - }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - var nodeCheck = part = part.toLowerCase(); - 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]); - return m ? [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){ - return context.getElementsByTagName(match[1]); - } - }, - preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ - match = " " + match[1].replace(/\\/g, "") + " "; - - 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]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - ID: function(match){ - return match[1].replace(/\\/g, ""); - }, - TAG: function(match, curLoop){ - return match[1].toLowerCase(); - }, - CHILD: function(match){ - if ( match[1] === "nth" ) { - // 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; - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ - var name = match[1].replace(/\\/g, ""); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - 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 - elem.parentNode.selectedIndex; - return elem.selected === true; - }, - parent: function(elem){ - return !!elem.firstChild; - }, - empty: function(elem){ - return !elem.firstChild; - }, - has: function(elem, i, match){ - /// - /// Internal use only; use hasClass('class') - /// - /// - - return !!Sizzle( match[3], elem ).length; - }, - header: function(elem){ - return /h\d/i.test( elem.nodeName ); - }, - text: function(elem){ - return "text" === elem.type; - }, - radio: function(elem){ - return "radio" === elem.type; - }, - checkbox: function(elem){ - return "checkbox" === elem.type; - }, - file: function(elem){ - return "file" === elem.type; - }, - password: function(elem){ - return "password" === elem.type; - }, - submit: function(elem){ - return "submit" === elem.type; - }, - image: function(elem){ - return "image" === elem.type; - }, - reset: function(elem){ - return "reset" === elem.type; - }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; - }, - input: function(elem){ - return /input|select|textarea|button/i.test(elem.nodeName); - } - }, - 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 i = 0, l = not.length; i < l; i++ ) { - if ( not[i] === elem ) { - return false; - } - } - - return true; - } else { - Sizzle.error( "Syntax error, unrecognized expression: " + name ); - } - }, - CHILD: function(elem, match){ - var 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; - case 'last': - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - return true; - case 'nth': - var first = match[2], last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - parent.sizcache = doneName; - } - - var 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.toLowerCase() === match; - }, - CLASS: function(elem, match){ - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - ATTR: function(elem, match){ - var name = match[1], - result = 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 === "=" ? - 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; - -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, function(all, num){ - return "\\" + (num - 0 + 1); - })); -} - -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. -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 ); - -// Provide a fallback method if it does not work -} catch(e){ - makeArray = function(array, results) { - var ret = results || []; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - } else { - if ( typeof array.length === "number" ) { - for ( var i = 0, l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - } else { - for ( var i = 0; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.compareDocumentPosition ? -1 : 1; - } - - var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( "sourceIndex" in document.documentElement ) { - sortOrder = function( a, b ) { - if ( !a.sourceIndex || !b.sourceIndex ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.sourceIndex ? -1 : 1; - } - - var ret = a.sourceIndex - b.sourceIndex; - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} else if ( document.createRange ) { - sortOrder = function( a, b ) { - if ( !a.ownerDocument || !b.ownerDocument ) { - if ( a == b ) { - hasDuplicate = true; - } - return a.ownerDocument ? -1 : 1; - } - - var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); - aRange.setStart(a, 0); - aRange.setEnd(a, 0); - bRange.setStart(b, 0); - bRange.setEnd(b, 0); - var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); - if ( ret === 0 ) { - hasDuplicate = true; - } - return ret; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -function getText( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += getText( elem.childNodes ); - } - } - - return ret; -} - -// [vsdoc] The following function has been modified for IntelliSense. -// 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(); - // form.innerHTML = ""; - - // // Inject it into the root element, check its status, and remove it quickly - // var root = document.documentElement; - // 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 ); - root = form = null; // release memory in IE -})(); - -// [vsdoc] The following function has been modified for IntelliSense. -(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); - }; - // } - - div = null; // release memory in IE -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); - 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 && context.nodeType === 9 && !isXML(context) ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(e){} - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - div = null; // release memory in IE - })(); -} - -(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]); - } - }; - - div = null; // release memory in IE -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = 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 ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = 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; - } - } -} - -var contains = document.compareDocumentPosition ? function(a, b){ - /// - /// Check to see if a DOM node is within another DOM node. - /// - /// - /// The DOM element that may contain the other element. - /// - /// - /// The DOM node that may be contained by the other element. - /// - /// - - return a.compareDocumentPosition(b) & 16; -} : function(a, b){ - /// - /// Check to see if a DOM node is within another DOM node. - /// - /// - /// The DOM element that may contain the other element. - /// - /// - /// The DOM node that may be contained by the other element. - /// - /// - - return a !== b && (a.contains ? a.contains(b) : true); -}; - -var isXML = function(elem){ - /// - /// Determines if the parameter passed is an XML document. - /// - /// The object to test - /// True if the parameter is an XML document; otherwise false. - - // 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){ - var tmpSet = [], later = "", match, - 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 ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.getText = getText; -jQuery.isXMLDoc = isXML; -jQuery.contains = contains; - -return; - -window.Sizzle = Sizzle; - -})(); -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - slice = Array.prototype.slice; - -// Implement the identical functionality for filter and not -var winnow = function( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) === 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; - }); -}; - -jQuery.fn.extend({ - find: function( selector ) { - /// - /// Searches for all elements that match the specified expression. - /// This method is a good way to find additional descendant - /// elements with which to process. - /// All searching is done using a jQuery expression. The expression can be - /// written using CSS 1-3 Selector syntax, or basic XPath. - /// Part of DOM/Traversing - /// - /// - /// - /// An expression to search with. - /// - /// - - var ret = this.pushStack( "", "find", selector ), length = 0; - - for ( var 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 ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - /// - /// Reduce the set of matched elements to those that have a descendant that matches the - /// selector or DOM element. - /// - /// - /// 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; - } - } - }); - }, - - not: function( selector ) { - /// - /// Removes any elements inside the array of elements from the set - /// of matched elements. This method is used to remove one or more - /// elements from a jQuery object. - /// Part of DOM/Traversing - /// - /// - /// A set of elements to remove from the jQuery set of matched elements. - /// - /// - - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - /// - /// Removes all elements from the set of matched elements that do not - /// pass the specified filter. This method is used to narrow down - /// the results of a search. - /// }) - /// Part of DOM/Traversing - /// - /// - /// - /// A function to use for filtering - /// - /// - - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - /// - /// Checks the current selection against an expression and returns true, - /// if at least one element of the selection fits the given expression. - /// Does return false, if no element fits or the expression is not valid. - /// filter(String) is used internally, therefore all rules that apply there - /// apply here, too. - /// Part of DOM/Traversing - /// - /// - /// - /// The expression with which to filter - /// - - return !!selector && jQuery.filter( selector, this ).length > 0; - }, - - closest: function( selectors, context ) { - /// - /// Get a set of elements containing the closest parent element that matches the specified selector, the starting element included. - /// - /// - /// 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. - /// - /// - - if ( jQuery.isArray( selectors ) ) { - var ret = [], cur = this[0], match, matches = {}, selector; - - if ( cur && selectors.length ) { - for ( var i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[selector]; - - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur }); - delete matches[selector]; - } - } - cur = cur.parentNode; - } - } - - return ret; - } - - var pos = jQuery.expr.match.POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; - - return this.map(function( i, cur ) { - while ( cur && cur.ownerDocument && cur !== context ) { - if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selectors) ) { - return cur; - } - cur = cur.parentNode; - } - return null; - }); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - /// - /// Searches every matched element for the object and returns - /// the index of the element, if found, starting with zero. - /// Returns -1 if the object wasn't found. - /// Part of Core - /// - /// - /// - /// Object to search for - /// - - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // 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 ) { - /// - /// Adds one or more Elements to the set of matched elements. - /// Part of DOM/Traversing - /// - /// - /// A string containing a selector expression to match additional elements against. - /// - /// - /// Add some elements rooted against the specified context. - /// - /// - - var set = typeof selector === "string" ? - jQuery( selector, context || this.context ) : - jQuery.makeArray( selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - /// - /// Adds the previous selection to the current selection. - /// - /// - - 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" ); - }, - 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" ); - }, - 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 ? 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.fn[ "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. - /// - /// - /// A string containing a selector expression to indicate where to stop matching ancestor - /// elements. - /// - /// - - var fn = function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - } - - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( "parentsUntil" ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "parentsUntil" ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, "parentsUntil", slice.call(arguments).join(",") ); -}; - -jQuery.fn[ "nextUntil" ] = function( until, selector ) { - /// - /// Get all following siblings of each element up to but not including the element matched - /// by the selector. - /// - /// - /// A string containing a selector expression to indicate where to stop matching following - /// sibling elements. - /// - /// - - var fn = function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - } - - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( "nextUntil" ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "nextUntil" ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, "nextUntil", slice.call(arguments).join(",") ); -}; - -jQuery.fn[ "prevUntil" ] = function( until, selector ) { - /// - /// Get all preceding siblings of each element up to but not including the element matched - /// by the selector. - /// - /// - /// A string containing a selector expression to indicate where to stop matching preceding - /// sibling elements. - /// - /// - - var fn = function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - } - - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( "prevUntil" ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( "prevUntil" ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, "prevUntil", slice.call(arguments).join(",") ); -}; - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - /// - /// This member is internal only. - /// - /// - - 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 ) { - /// - /// This member is internal only. - /// - /// - - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - /// - /// This member is internal only. - /// - /// - - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /(<([\w:]+)[^>]*?)\/>/g, - rselfClosing = /^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i, - rtagName = /<([\w:]+)/, - rtbody = /"; - }, - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - thead: [ 1, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - col: [ 2, "", "
    " ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and - - - - Detects whether we are currently in a WoW64 process or not. - - - - - - - - - - - - - Detects whether we are currently in a 32-bit or 64-bit process (not necessarily what the OS is running). Note that as of the time of this writing, this will ALWAYS return false because NAnt is compiled to run in 32-bit mode only. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/mvc3/ReleaseNotes.txt b/mvc3/ReleaseNotes.txt deleted file mode 100644 index d30af72..0000000 --- a/mvc3/ReleaseNotes.txt +++ /dev/null @@ -1,26 +0,0 @@ -Version 3.2.1 ---------------- -Moved common bindings to Ninject.Web.Common so that multiple web extensions can be used together. - -Version 3.2.0 ---------------- -- Added: WhenActionMethodHasNo and WhenControllerHasNo conditions to the filter binding syntax -- Added: Support for adding multiple filters of the same type to an action method using attributes - -Version 3.0.0.0 ---------------- -- Added: Multiple filters of the same type can be used at the same time. This allows using differently configured filters of the same type. -- Added: BindToFilter overload that allows selection of the constructor and to specify which value to use from an attribue with out using magic strings. -- Changed: This extension requires now Ninject.Web.Common. This allows combining it with the other web extesnions (WCF + MVC) - -Version 2.2.2.0 ---------------- -- Http Application is property injected after it is created - -Version 2.2.1.0 ---------------- -- Bugfix: Removed th bug that occured when the filters were reparsed by ASP.NET and left the application in an unsuable state -- Bugfix: NuGet package does not dispose the kernel anymore befor the application was shutdown -- Change for NuGet: Changed to WebActivator 1.4 -- Change for NUGet: Changed the class named according to the naming conventions of WebActivator. - NOTE: You have to move the kernel configuration code from NinjectHttpApplicationModule to AppStart/NinjectMVC3 \ No newline at end of file diff --git a/mvc3/UnzipDependencies.cmd b/mvc3/UnzipDependencies.cmd deleted file mode 100644 index 4b715cf..0000000 --- a/mvc3/UnzipDependencies.cmd +++ /dev/null @@ -1,5 +0,0 @@ -..\tools\nant\nant.exe -buildfile:Ninject.build UnzipDependencies %1 %2 %3 %4 %5 %6 %7 %8 - -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc3/build-alpha.cmd b/mvc3/build-alpha.cmd deleted file mode 100644 index f7403b3..0000000 --- a/mvc3/build-alpha.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-alpha" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-alpha" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc3/build-beta.cmd b/mvc3/build-beta.cmd deleted file mode 100644 index 9d0984a..0000000 --- a/mvc3/build-beta.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-beta" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-beta" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc3/build-rc1.cmd b/mvc3/build-rc1.cmd deleted file mode 100644 index ae54073..0000000 --- a/mvc3/build-rc1.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-rc1" package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:product.additionalVersionTag=-rc1" "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc3/build-release.cmd b/mvc3/build-release.cmd deleted file mode 100644 index 5361bbd..0000000 --- a/mvc3/build-release.cmd +++ /dev/null @@ -1,32 +0,0 @@ -@echo off -set nantfile=Ninject.build -set nantexe=..\tools\nant\nant.exe -set buildlog=Ninject-Nant-Build.log -set unittestlog=Ninject-Nant-unit-tests.log - -%nantexe% -buildfile:%nantfile% clean %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% package-source %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% "-D:build.config=release" allPlatforms %1 %2 %3 %4 %5 %6 %7 %8 -IF ERRORLEVEL 1 GOTO Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert - -IF ERRORLEVEL 1 GOTO Failed - -echo "Release build completed." -GOTO End - -:Failed -%nantexe% -buildfile:%nantfile% -q -nologo revert -echo "============================================================" -echo "BUILD FAILED" -echo "============================================================" - -IF NOT "%NoPause%"=="true" goto END -exit /B 1 - -:End -if "%NoPause%"=="true" goto ENDBATCHFILE -pause -:ENDBATCHFILE \ No newline at end of file diff --git a/mvc3/build.cmd b/mvc3/build.cmd deleted file mode 100644 index bcc55e2..0000000 --- a/mvc3/build.cmd +++ /dev/null @@ -1,3 +0,0 @@ -..\tools\nant\nant.exe -buildfile:Ninject.Web.Mvc.build %1 %2 %3 %4 %5 %6 %7 %8 - -pause \ No newline at end of file diff --git a/mvc3/nuget-MVC4/Ninject.Web.Mvc.nuspec b/mvc3/nuget-MVC4/Ninject.Web.Mvc.nuspec deleted file mode 100644 index 63d9ba2..0000000 --- a/mvc3/nuget-MVC4/Ninject.Web.Mvc.nuspec +++ /dev/null @@ -1,23 +0,0 @@ - - - - Ninject.MVC4 - 2.2.0.1 - Remo Gloor, Ian Davis - true - https://github.com/ninject/ninject.web.mvc/raw/master/mvc3/LICENSE.txt - Extension for Ninject providing integration with ASP.NET MVC4 - Extension for Ninject providing integration with ASP.NET MVC4 - en-US - Ninject ioc di web mvc4 - https://github.com/ninject/ninject/raw/master/logos/Ninject-Logo32.png - http://www.ninject.org - - - - - - - - - diff --git a/mvc3/nuget-MVC5/Ninject.Web.Mvc.nuspec b/mvc3/nuget-MVC5/Ninject.Web.Mvc.nuspec deleted file mode 100644 index a3ffa77..0000000 --- a/mvc3/nuget-MVC5/Ninject.Web.Mvc.nuspec +++ /dev/null @@ -1,23 +0,0 @@ - - - - Ninject.MVC5 - 2.2.0.1 - Remo Gloor, Ian Davis - true - https://github.com/ninject/ninject.web.mvc/raw/master/mvc3/LICENSE.txt - Extension for Ninject providing integration with ASP.NET MVC5 - Extension for Ninject providing integration with ASP.NET MVC5 - en-US - Ninject ioc di web mvc5 - https://github.com/ninject/ninject/raw/master/logos/Ninject-Logo32.png - http://www.ninject.org - - - - - - - - - diff --git a/mvc3/nuget/Ninject.Web.Mvc.nuspec b/mvc3/nuget/Ninject.Web.Mvc.nuspec deleted file mode 100644 index e16594e..0000000 --- a/mvc3/nuget/Ninject.Web.Mvc.nuspec +++ /dev/null @@ -1,23 +0,0 @@ - - - - Ninject.MVC3 - 2.2.0.1 - Remo Gloor, Ian Davis - true - https://github.com/ninject/ninject.web.mvc/raw/master/mvc3/LICENSE.txt - Extension for Ninject providing integration with ASP.NET MVC3 - Extension for Ninject providing integration with ASP.NET MVC3 - en-US - Ninject ioc di web mvc3 - https://github.com/ninject/ninject/raw/master/logos/Ninject-Logo32.png - http://www.ninject.org - - - - - - - - - \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/Filter/INinjectFilter.cs b/mvc3/src/Ninject.Web.Mvc/Filter/INinjectFilter.cs deleted file mode 100644 index 47ebc44..0000000 --- a/mvc3/src/Ninject.Web.Mvc/Filter/INinjectFilter.cs +++ /dev/null @@ -1,37 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc.Filter -{ - using System.Collections.Generic; - using System.Web.Mvc; - - /// - /// Used by the NinjectFilterProvider to get injected filters. - /// - public interface INinjectFilter - { - /// - /// Builds the filter instances. - /// - /// The parameter. - /// The created filters. - IEnumerable BuildFilters(FilterContextParameter parameter); - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingInNamedWithOrOnSyntax.cs b/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingInNamedWithOrOnSyntax.cs deleted file mode 100644 index d2e75e9..0000000 --- a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingInNamedWithOrOnSyntax.cs +++ /dev/null @@ -1,33 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc.FilterBindingSyntax -{ - /// - /// Used to set the scope, name, or add additional information or actions to a binding. - /// - /// The service being bound. - public interface IFilterBindingInNamedWithOrOnSyntax : - IFilterBindingInSyntax, - IFilterBindingNamedSyntax, - IFilterBindingWithSyntax, - IFilterBindingOnSyntax - { - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedSyntax.cs b/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedSyntax.cs deleted file mode 100644 index f8096cc..0000000 --- a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedSyntax.cs +++ /dev/null @@ -1,38 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc.FilterBindingSyntax -{ - using Ninject.Syntax; - - /// - /// Used to define the name of a binding. - /// - /// The service being bound. - public interface IFilterBindingNamedSyntax : IBindingSyntax - { - /// - /// Indicates that the binding should be registered with the specified name. Names are not - /// necessarily unique; multiple bindings for a given service may be registered with the same name. - /// - /// The name to give the binding. - /// The fluent syntax to define more information - IFilterBindingWithOrOnSyntax Named(string name); - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedWithOrOnSyntax.cs b/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedWithOrOnSyntax.cs deleted file mode 100644 index 66fec45..0000000 --- a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingNamedWithOrOnSyntax.cs +++ /dev/null @@ -1,32 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc.FilterBindingSyntax -{ - /// - /// Used to set the scope, name, or add additional information or actions to a binding. - /// - /// The service being bound. - public interface IFilterBindingNamedWithOrOnSyntax : - IFilterBindingNamedSyntax, - IFilterBindingWithSyntax, - IFilterBindingOnSyntax - { - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWhenInNamedWithOrOnSyntax.cs b/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWhenInNamedWithOrOnSyntax.cs deleted file mode 100644 index db45d73..0000000 --- a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWhenInNamedWithOrOnSyntax.cs +++ /dev/null @@ -1,34 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc.FilterBindingSyntax -{ - /// - /// Used to set the scope, name, or add additional information or actions to a binding. - /// - /// The service being bound. - public interface IFilterBindingWhenInNamedWithOrOnSyntax : - IFilterBindingWhenSyntax, - IFilterBindingInSyntax, - IFilterBindingNamedSyntax, - IFilterBindingWithSyntax, - IFilterBindingOnSyntax - { - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWithOrOnSyntax.cs b/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWithOrOnSyntax.cs deleted file mode 100644 index fd74273..0000000 --- a/mvc3/src/Ninject.Web.Mvc/FilterBindingSyntax/IFilterBindingWithOrOnSyntax.cs +++ /dev/null @@ -1,31 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace Ninject.Web.Mvc.FilterBindingSyntax -{ - /// - /// Used to add additional information or actions to a binding. - /// - /// The service being bound. - public interface IFilterBindingWithOrOnSyntax : - IFilterBindingWithSyntax, - IFilterBindingOnSyntax - { - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/MvcModule.cs b/mvc3/src/Ninject.Web.Mvc/MvcModule.cs deleted file mode 100644 index 9b1b8c4..0000000 --- a/mvc3/src/Ninject.Web.Mvc/MvcModule.cs +++ /dev/null @@ -1,51 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2011 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -using Ninject.Modules; - -namespace Ninject.Web.Mvc -{ - using System.Web; - using System.Web.Mvc; - using System.Web.Routing; - - using Ninject.Web.Common; - using Ninject.Web.Mvc.Filter; - using Ninject.Web.Mvc.Validation; - - /// - /// Defines the bindings and plugins of the MVC web extension. - /// - public class MvcModule : NinjectModule - { - /// - /// Loads the module into the kernel. - /// - public override void Load() - { - this.Kernel.Components.Add(); - this.Kernel.Bind().To(); - this.Kernel.Bind().To(); - this.Kernel.Bind().To(); - this.Kernel.Bind().To(); - //this.Kernel.Bind().To(); - //this.Kernel.Bind().To(); - } - } -} \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj b/mvc3/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj deleted file mode 100644 index 534ba57..0000000 --- a/mvc3/src/Ninject.Web.Mvc/Ninject.Web.Mvc.csproj +++ /dev/null @@ -1,142 +0,0 @@ - - - - Debug - AnyCPU - 9.0.30729 - 2.0 - {82222179-0EB8-4C43-AD48-6EA388349C64} - Library - Properties - Ninject.Web.Mvc - Ninject.Web.Mvc - v4.0 - 512 - true - ..\Ninject.snk - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - - true - full - false - ..\..\build\debug\ - DEBUG;TRACE - prompt - 4 - ..\..\build\debug\Ninject.Web.Mvc.xml - false - AllRules.ruleset - - - pdbonly - true - ..\..\build\release\ - TRACE - prompt - 4 - ..\..\build\release\Ninject.Web.Mvc.xml - true - AllRules.ruleset - - - - ..\..\..\lib\Ninject\net-4.0\Ninject.dll - - - ..\..\..\lib\Ninject.Web.Common\net-4.0\Ninject.Web.Common.dll - - - - - 3.5 - - - - False - ..\..\lib\System.Web.Abstractions.dll - 3.5 - - - False - ..\..\..\lib\Mvc3\System.Web.Mvc.dll - - - False - ..\..\lib\System.Web.Routing.dll - 3.5 - - - - - Properties\SharedAssemblyInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - \ No newline at end of file diff --git a/mvc3/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs b/mvc3/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs deleted file mode 100644 index 327fd84..0000000 --- a/mvc3/src/Ninject.Web.Mvc/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- -using System.Reflection; - -[assembly: AssemblyTitle("Ninject ASP.NET MVC Integration")] -[assembly: AssemblyDescriptionAttribute("Extension for Ninject providing integration with ASP.NET MVC3")] diff --git a/mvc3/src/Ninject.snk b/mvc3/src/Ninject.snk deleted file mode 100644 index b91a25c532bdc53f297e3ef0d36930042ebc8c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 596 zcmV-a0;~N80ssI2Bme+XQ$aES1ONa50098={3S2k-`k?*)EtPaU1Un6fWvohO?p29 zVpB(@KkpW^lm|g5TW1DzfXp7+QSqs=Rm?i_-1l=OVjJ1^MBbhg5v9`jy)aZ)J*jZR zHD&`nk-+{$Al0xRnQAhwIz;-^nRM;ARBu6!%2;log`uH!p|_oG$WL|DxD=!dD!jRi zoHXRL%2!?F;xndqR<4c&rPg3w^S+$ZH|V`C9VV;U1EO(skm%7o5X>`?VJqUL+ z8mkVVs+Stbdm%+Tt!VXSY|}C~XQgxUxCuE_+trvCkVwUFgF_XfP8@q8km*4U{FB&c z5YcN`t8{^$z6n icNWHC*TDE}u*8xSDiFy=0C|2J diff --git a/mvc3/src/SampleApplication/App_Data/ASPNETDB.MDF b/mvc3/src/SampleApplication/App_Data/ASPNETDB.MDF deleted file mode 100644 index 071de7cf0c4878bf5f1d1130900ec98b55d5bd5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10485760 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 z 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%0DBlz*q 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 z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwA zz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEj zFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r z3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@ z0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VK zfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5 zV8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM z7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b* z1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd z0RsjM7%*VKfB^#r3>YwAz<>b*1`HT5V8DO@0|pEjFkrxd0RsjM7%*VKfB^#r3~U1d DPPdB> diff --git a/mvc3/src/SampleApplication/App_Data/aspnetdb_log.ldf b/mvc3/src/SampleApplication/App_Data/aspnetdb_log.ldf deleted file mode 100644 index 4f6b3f635c4d85c5be14aa25574bb21112325089..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 516096 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 zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1V~_H2s~*D zVMISDCdZ}lJda3#1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c zNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-L zfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@ z1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LfCNZ@1W14c kNPq-LfCNZ@1W14cNPq-LfCNZ@1W14cNPq-LpiTn+7obsWmH+?% diff --git a/mvc3/src/SampleApplication/Areas/SampleArea/SampleAreaAreaRegistration.cs b/mvc3/src/SampleApplication/Areas/SampleArea/SampleAreaAreaRegistration.cs deleted file mode 100644 index c6b3dbb..0000000 --- a/mvc3/src/SampleApplication/Areas/SampleArea/SampleAreaAreaRegistration.cs +++ /dev/null @@ -1,54 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Areas.SampleArea -{ - using System.Web.Mvc; - - ///

    - /// The registration for the sample area - /// - public class SampleAreaAreaRegistration : AreaRegistration - { - /// - /// Gets the name of the area to be registered. - /// - /// - /// The name of the area to be registered. - public override string AreaName - { - get - { - return "SampleArea"; - } - } - - /// - /// Registers an area in an ASP.NET MVC application using the specified area's context information. - /// - /// Encapsulates the information that is required in order to register the area. - public override void RegisterArea(AreaRegistrationContext context) - { - context.MapRoute( - "SampleArea_default", - "SampleArea/{controller}/{action}/{id}", - new { action = "Index", id = UrlParameter.Optional }); - } - } -} diff --git a/mvc3/src/SampleApplication/Content/Site.css b/mvc3/src/SampleApplication/Content/Site.css deleted file mode 100644 index fedbbc3..0000000 --- a/mvc3/src/SampleApplication/Content/Site.css +++ /dev/null @@ -1,344 +0,0 @@ -/*---------------------------------------------------------- -The base color for this template is #5c87b2. If you'd like -to use a different color start by replacing all instances of -#5c87b2 with your new color. -----------------------------------------------------------*/ -body -{ - background-color: #5c87b2; - font-size: .75em; - font-family: Verdana, Helvetica, Sans-Serif; - margin: 0; - padding: 0; - color: #696969; -} - -a:link -{ - color: #034af3; - text-decoration: underline; -} -a:visited -{ - color: #505abc; -} -a:hover -{ - color: #1d60ff; - text-decoration: none; -} -a:active -{ - color: #12eb87; -} - -p, ul -{ - margin-bottom: 20px; - line-height: 1.6em; -} - -/* HEADINGS -----------------------------------------------------------*/ -h1, h2, h3, h4, h5, h6 -{ - font-size: 1.5em; - color: #000; - font-family: Arial, Helvetica, sans-serif; -} - -h1 -{ - font-size: 2em; - padding-bottom: 0; - margin-bottom: 0; -} -h2 -{ - padding: 0 0 10px 0; -} -h3 -{ - font-size: 1.2em; -} -h4 -{ - font-size: 1.1em; -} -h5, h6 -{ - font-size: 1em; -} - -/* this rule styles

    tags that are the -first child of the left and right table columns */ -.rightColumn > h1, .rightColumn > h2, .leftColumn > h1, .leftColumn > h2 -{ - margin-top: 0; -} - -/* 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 -{ - position: relative; - margin-bottom: 0px; - color: #000; - padding: 0; -} - -#header h1 -{ - font-weight: bold; - padding: 5px 0; - margin: 0; - color: #fff; - border: none; - line-height: 2em; - font-family: Arial, Helvetica, sans-serif; - font-size: 32px !important; -} - -#main -{ - padding: 30px 30px 15px 30px; - background-color: #fff; - margin-bottom: 30px; - _height: 1px; /* only IE6 applies CSS properties starting with an underscore */ -} - -#footer -{ - color: #999; - padding: 10px 0; - text-align: center; - line-height: normal; - margin: 0; - font-size: .9em; -} - -/* TAB MENU -----------------------------------------------------------*/ -ul#menu -{ - border-bottom: 1px #5C87B2 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: #e8eef4; - color: #034af3; -} - -ul#menu li a:hover -{ - background-color: #fff; - text-decoration: none; -} - -ul#menu li a:active -{ - background-color: #a6e2a6; - text-decoration: none; -} - -ul#menu li.selected a -{ - background-color: #fff; - color: #000; -} - -/* FORM LAYOUT ELEMENTS -----------------------------------------------------------*/ - -fieldset -{ - margin: 1em 0; - padding: 1em; - border: 1px solid #CCC; -} - -fieldset p -{ - margin: 2px 12px 10px 10px; -} - -legend -{ - font-size: 1.1em; - font-weight: 600; - padding: 2px 4px 8px 4px; -} - -input[type="text"] -{ - width: 200px; - border: 1px solid #CCC; -} - -input[type="password"] -{ - width: 200px; - border: 1px solid #CCC; -} - -/* TABLE -----------------------------------------------------------*/ - -table -{ - border: solid 1px #e8eef4; - border-collapse: collapse; -} - -table td -{ - padding: 5px; - border: solid 1px #e8eef4; -} - -table th -{ - padding: 6px 5px; - text-align: left; - background-color: #e8eef4; - border: solid 1px #e8eef4; -} - -/* MISC -----------------------------------------------------------*/ -.clear -{ - clear: both; -} - -.error -{ - color:Red; -} - -#menucontainer -{ - margin-top:40px; -} - -div#title -{ - display:block; - float:left; - text-align:left; -} - -#logindisplay -{ - font-size:1.1em; - display:block; - text-align:right; - margin:10px; - color:White; -} - -#logindisplay a:link -{ - color: white; - text-decoration: underline; -} - -#logindisplay a:visited -{ - color: white; - text-decoration: underline; -} - -#logindisplay a:hover -{ - color: white; - text-decoration: none; -} - -/* Styles for validation helpers ------------------------------------------------------------*/ -.field-validation-error -{ - color: #ff0000; -} - -.field-validation-valid -{ - display: none; -} - -.input-validation-error -{ - border: 1px solid #ff0000; - background-color: #ffeeee; -} - -.validation-summary-errors -{ - font-weight: bold; - color: #ff0000; -} - -.validation-summary-valid -{ - display: none; -} - -/* Styles for editor and display helpers -----------------------------------------------------------*/ -.display-label, -.editor-label, -.display-field, -.editor-field -{ - margin: 0.5em 0; -} - -.text-box -{ - width: 30em; -} - -.text-box.multi-line -{ - height: 6.5em; -} - -.tri-state -{ - width: 6em; -} diff --git a/mvc3/src/SampleApplication/Global.asax b/mvc3/src/SampleApplication/Global.asax deleted file mode 100644 index ccb653f..0000000 --- a/mvc3/src/SampleApplication/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Codebehind="Global.asax.cs" Inherits="SampleApplication.MvcApplication" Language="C#" %> diff --git a/mvc3/src/SampleApplication/Models/Account/AccountValidationErrorMessages.cs b/mvc3/src/SampleApplication/Models/Account/AccountValidationErrorMessages.cs deleted file mode 100644 index 3b29c3c..0000000 --- a/mvc3/src/SampleApplication/Models/Account/AccountValidationErrorMessages.cs +++ /dev/null @@ -1,72 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Models.Account -{ - using System.Web.Security; - - /// - /// The account validation error messages - /// - public static class AccountValidationErrorMessages - { - /// - /// Converts error codes to error messages - /// - /// The create status. - /// The erroro message - public static string ErrorCodeToString(MembershipCreateStatus createStatus) - { - // See http://go.microsoft.com/fwlink/?LinkID=177550 for - // a full list of status codes. - switch (createStatus) - { - case MembershipCreateStatus.DuplicateUserName: - return "Username already exists. Please enter a different user name."; - - case MembershipCreateStatus.DuplicateEmail: - return "A username for that e-mail address already exists. Please enter a different e-mail address."; - - case MembershipCreateStatus.InvalidPassword: - return "The password provided is invalid. Please enter a valid password value."; - - case MembershipCreateStatus.InvalidEmail: - return "The e-mail address provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.InvalidAnswer: - return "The password retrieval answer provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.InvalidQuestion: - return "The password retrieval question provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.InvalidUserName: - return "The user name provided is invalid. Please check the value and try again."; - - case MembershipCreateStatus.ProviderError: - return "The authentication provider returned an error. Please verify your entry and try again. If the problem persists, please contact your system administrator."; - - case MembershipCreateStatus.UserRejected: - return "The user creation request has been canceled. Please verify your entry and try again. If the problem persists, please contact your system administrator."; - - default: - return "An unknown error occurred. Please verify your entry and try again. If the problem persists, please contact your system administrator."; - } - } - } -} \ No newline at end of file diff --git a/mvc3/src/SampleApplication/Models/Account/ChangePasswordModel.cs b/mvc3/src/SampleApplication/Models/Account/ChangePasswordModel.cs deleted file mode 100644 index fece924..0000000 --- a/mvc3/src/SampleApplication/Models/Account/ChangePasswordModel.cs +++ /dev/null @@ -1,57 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Models.Account -{ - using System.ComponentModel.DataAnnotations; - - /// - /// The view modell for changing passwords - /// - public class ChangePasswordModel - { - /// - /// Gets or sets the old password. - /// - /// The old password. - [Required] - [DataType(DataType.Password)] - [Display(Name = "Current password")] - public string OldPassword { get; set; } - - /// - /// Gets or sets the new password. - /// - /// The new password. - [Required] - [ValidatePasswordLength] - [DataType(DataType.Password)] - [Display(Name = "New password")] - public string NewPassword { get; set; } - - /// - /// Gets or sets the password confirmation. - /// - /// The password confirmation. - [DataType(DataType.Password)] - [Display(Name = "Confirm new password")] - [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } -} \ No newline at end of file diff --git a/mvc3/src/SampleApplication/Models/Account/LogOnModel.cs b/mvc3/src/SampleApplication/Models/Account/LogOnModel.cs deleted file mode 100644 index d350ae9..0000000 --- a/mvc3/src/SampleApplication/Models/Account/LogOnModel.cs +++ /dev/null @@ -1,53 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Models.Account -{ - using System.ComponentModel.DataAnnotations; - - /// - /// The model for user logon - /// - public class LogOnModel - { - /// - /// Gets or sets the name of the user. - /// - /// The name of the user. - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - /// - /// Gets or sets the password. - /// - /// The password. - [Required] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - /// - /// Gets or sets a value indicating whether the user shall be remembered. - /// - /// true if the user shall be remembered; otherwise, false. - [Display(Name = "Remember me?")] - public bool RememberMe { get; set; } - } -} \ No newline at end of file diff --git a/mvc3/src/SampleApplication/Models/Account/RegisterModel.cs b/mvc3/src/SampleApplication/Models/Account/RegisterModel.cs deleted file mode 100644 index 5b4db9d..0000000 --- a/mvc3/src/SampleApplication/Models/Account/RegisterModel.cs +++ /dev/null @@ -1,65 +0,0 @@ -//------------------------------------------------------------------------------- -// -// Copyright (c) 2010 bbv Software Services AG -// Author: Remo Gloor (remo.gloor@gmail.com) -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -//------------------------------------------------------------------------------- - -namespace SampleApplication.Models.Account -{ - using System.ComponentModel.DataAnnotations; - - /// - /// The view model to register a new user - /// - public class RegisterModel - { - /// - /// Gets or sets the name of the user. - /// - /// The name of the user. - [Required] - [Display(Name = "User name")] - public string UserName { get; set; } - - /// - /// Gets or sets the email address. - /// - /// The email address. - [Required] - [DataType(DataType.EmailAddress)] - [Display(Name = "Email address")] - public string Email { get; set; } - - /// - /// Gets or sets the password. - /// - /// The password. - [Required] - [ValidatePasswordLength] - [DataType(DataType.Password)] - [Display(Name = "Password")] - public string Password { get; set; } - - /// - /// Gets or sets the password confirmation. - /// - /// The password confirmation. - [DataType(DataType.Password)] - [Display(Name = "Confirm password")] - [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] - public string ConfirmPassword { get; set; } - } -} \ No newline at end of file diff --git a/mvc3/src/SampleApplication/Scripts/MicrosoftAjax.js b/mvc3/src/SampleApplication/Scripts/MicrosoftAjax.js deleted file mode 100644 index 52e6626..0000000 --- a/mvc3/src/SampleApplication/Scripts/MicrosoftAjax.js +++ /dev/null @@ -1,6 +0,0 @@ -//---------------------------------------------------------- -// 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/mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.debug.js b/mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.debug.js deleted file mode 100644 index eb68ba7..0000000 --- a/mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.debug.js +++ /dev/null @@ -1,408 +0,0 @@ -//!---------------------------------------------------------- -//! 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/mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.js b/mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.js deleted file mode 100644 index c5a6165..0000000 --- a/mvc3/src/SampleApplication/Scripts/MicrosoftMvcAjax.js +++ /dev/null @@ -1,25 +0,0 @@ -//---------------------------------------------------------- -// 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/mvc3/src/SampleApplication/Scripts/jquery-1.4.1.min.js b/mvc3/src/SampleApplication/Scripts/jquery-1.4.1.min.js deleted file mode 100644 index 15b830c..0000000 --- a/mvc3/src/SampleApplication/Scripts/jquery-1.4.1.min.js +++ /dev/null @@ -1,167 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.1 - * http://jquery.com/ - * - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * - * 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. - * - * Date: Mon Jan 25 19:43:33 2010 -0500 - */ -(function(z,v){function la(){if(!c.isReady){try{r.documentElement.doScroll("left")}catch(a){setTimeout(la,1);return}c.ready()}}function Ma(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,i){var j=a.length;if(typeof b==="object"){for(var n in b)X(a,n,b[n],f,e,d);return a}if(d!==v){f=!i&&f&&c.isFunction(d);for(n=0;n-1){i=j.data;i.beforeFilter&&i.beforeFilter[a.type]&&!i.beforeFilter[a.type](a)||f.push(j.selector)}else delete x[o]}i=c(a.target).closest(f, -a.currentTarget);m=0;for(s=i.length;m)[^>]*$|^#([\w-]+)$/,Qa=/^.[^:#\[\.,]*$/,Ra=/\S/,Sa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Ta=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,O=navigator.userAgent, -va=false,P=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,Q=Array.prototype.slice,wa=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(typeof a==="string")if((d=Pa.exec(a))&&(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:r;if(a=Ta.exec(a))if(c.isPlainObject(b)){a=[r.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=ra([d[1]], -[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}}else{if(b=r.getElementById(d[2])){if(b.id!==d[2])return S.find(a);this.length=1;this[0]=b}this.context=r;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=r;a=r.getElementsByTagName(a)}else return!b||b.jquery?(b||S).find(a):c(b).find(a);else if(c.isFunction(a))return S.ready(a);if(a.selector!==v){this.selector=a.selector;this.context=a.context}return c.isArray(a)?this.setArray(a):c.makeArray(a, -this)},selector:"",jquery:"1.4.1",length:0,size:function(){return this.length},toArray:function(){return Q.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){a=c(a||null);a.prevObject=this;a.context=this.context;if(b==="find")a.selector=this.selector+(this.selector?" ":"")+d;else if(b)a.selector=this.selector+"."+b+"("+d+")";return a},setArray:function(a){this.length=0;ba.apply(this,a);return this},each:function(a,b){return c.each(this, -a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(r,c);else P&&P.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(Q.apply(this,arguments),"slice",Q.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice}; -c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,i,j,n;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
    a";var e=d.getElementsByTagName("*"),i=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!i)){c.support= -{leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(i.getAttribute("style")),hrefNormalized:i.getAttribute("href")==="/a",opacity:/^0.55$/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:r.createElement("select").appendChild(r.createElement("option")).selected,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null}; -b.type="text/javascript";try{b.appendChild(r.createTextNode("window."+f+"=1;"))}catch(j){}a.insertBefore(b,a.firstChild);if(z[f]){c.support.scriptEval=true;delete z[f]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function n(){c.support.noCloneEvent=false;d.detachEvent("onclick",n)});d.cloneNode(true).fireEvent("onclick")}d=r.createElement("div");d.innerHTML="";a=r.createDocumentFragment();a.appendChild(d.firstChild); -c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var n=r.createElement("div");n.style.width=n.style.paddingLeft="1px";r.body.appendChild(n);c.boxModel=c.support.boxModel=n.offsetWidth===2;r.body.removeChild(n).style.display="none"});a=function(n){var o=r.createElement("div");n="on"+n;var m=n in o;if(!m){o.setAttribute(n,"return;");m=typeof o[n]==="function"}return m};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=i=null}})();c.props= -{"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ua=0,xa={},Va={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var f=a[G],e=c.cache;if(!b&&!f)return null;f||(f=++Ua);if(typeof b==="object"){a[G]=f;e=e[f]=c.extend(true, -{},b)}else e=e[f]?e[f]:typeof d==="undefined"?Va:(e[f]={});if(d!==v){a[G]=f;e[b]=d}return typeof b==="string"?e[b]:e}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==z?xa:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{try{delete a[G]}catch(i){a.removeAttribute&&a.removeAttribute(G)}delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this, -a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===v){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===v&&this.length)f=c.data(this[0],a);return f===v&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d); -return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===v)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]|| -a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var ya=/[\n\t]/g,ca=/\s+/,Wa=/\r/g,Xa=/href|src|style/,Ya=/(button|input)/i,Za=/(button|input|object|select|textarea)/i,$a=/^(a|area)$/i,za=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(o){var m= -c(this);m.addClass(a.call(this,o,m.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===v){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value|| -{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var i=b?d:0;for(d=b?d+1:e.length;i=0;else if(c.nodeName(this,"select")){var x=c.makeArray(s);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),x)>=0});if(!x.length)this.selectedIndex=-1}else this.value=s}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return v;if(f&&b in c.attrFn)return c(a)[b](d); -f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==v;b=f&&c.props[b]||b;if(a.nodeType===1){var i=Xa.test(b);if(b in a&&f&&!i){if(e){b==="type"&&Ya.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Za.test(a.nodeName)||$a.test(a.nodeName)&&a.href?0:v;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText= -""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&i?a.getAttribute(b,2):a.getAttribute(b);return a===null?v:a}return c.style(a,b,d)}});var ab=function(a){return a.replace(/[^\w\s\.\|`]/g,function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==z&&!a.frameElement)a=z;if(!d.guid)d.guid=c.guid++;if(f!==v){d=c.proxy(d);d.data=f}var e=c.data(a,"events")||c.data(a,"events",{}),i=c.data(a,"handle"),j;if(!i){j= -function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(j.elem,arguments):v};i=c.data(a,"handle",j)}if(i){i.elem=a;b=b.split(/\s+/);for(var n,o=0;n=b[o++];){var m=n.split(".");n=m.shift();if(o>1){d=c.proxy(d);if(f!==v)d.data=f}d.type=m.slice(0).sort().join(".");var s=e[n],x=this.special[n]||{};if(!s){s=e[n]={};if(!x.setup||x.setup.call(a,f,m,d)===false)if(a.addEventListener)a.addEventListener(n,i,false);else a.attachEvent&&a.attachEvent("on"+n,i)}if(x.add)if((m=x.add.call(a, -d,f,m,s))&&c.isFunction(m)){m.guid=m.guid||d.guid;m.data=m.data||d.data;m.type=m.type||d.type;d=m}s[d.guid]=d;this.global[n]=true}a=null}}},global:{},remove:function(a,b,d){if(!(a.nodeType===3||a.nodeType===8)){var f=c.data(a,"events"),e,i,j;if(f){if(b===v||typeof b==="string"&&b.charAt(0)===".")for(i in f)this.remove(a,i+(b||""));else{if(b.type){d=b.handler;b=b.type}b=b.split(/\s+/);for(var n=0;i=b[n++];){var o=i.split(".");i=o.shift();var m=!o.length,s=c.map(o.slice(0).sort(),ab);s=new RegExp("(^|\\.)"+ -s.join("\\.(?:.*\\.)?")+"(\\.|$)");var x=this.special[i]||{};if(f[i]){if(d){j=f[i][d.guid];delete f[i][d.guid]}else for(var A in f[i])if(m||s.test(f[i][A].type))delete f[i][A];x.remove&&x.remove.call(a,o,j);for(e in f[i])break;if(!e){if(!x.teardown||x.teardown.call(a,o)===false)if(a.removeEventListener)a.removeEventListener(i,c.data(a,"handle"),false);else a.detachEvent&&a.detachEvent("on"+i,c.data(a,"handle"));e=null;delete f[i]}}}}for(e in f)break;if(!e){if(A=c.data(a,"handle"))A.elem=null;c.removeData(a, -"events");c.removeData(a,"handle")}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();this.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return v;a.result=v;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d, -b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(i){}if(!a.isPropagationStopped()&&f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){d=a.target;var j;if(!(c.nodeName(d,"a")&&e==="click")&&!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()])){try{if(d[e]){if(j=d["on"+e])d["on"+e]=null;this.triggered=true;d[e]()}}catch(n){}if(j)d["on"+e]=j;this.triggered=false}}},handle:function(a){var b, -d;a=arguments[0]=c.event.fix(a||z.event);a.currentTarget=this;d=a.type.split(".");a.type=d.shift();b=!d.length&&!a.exclusive;var f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)");d=(c.data(this,"events")||{})[a.type];for(var e in d){var i=d[e];if(b||f.test(i.type)){a.handler=i;a.data=i.data;i=i.apply(this,arguments);if(i!==v){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), -fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||r;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=r.documentElement;d=r.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop|| -d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==v)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a,b){c.extend(a,b||{});a.guid+=b.selector+b.live;b.liveProxy=a;c.event.add(this,b.live,na,b)},remove:function(a){if(a.length){var b= -0,d=new RegExp("(^|\\.)"+a[0]+"(\\.|$)");c.each(c.data(this,"events").live||{},function(){d.test(this.type)&&b++});b<1&&c.event.remove(this,a[0],na)}},special:{}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true}; -c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y};var Aa=function(a){for(var b= -a.relatedTarget;b&&b!==this;)try{b=b.parentNode}catch(d){break}if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}},Ba=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ba:Aa,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ba:Aa)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(a,b,d){if(this.nodeName.toLowerCase()!== -"form"){c.event.add(this,"click.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="submit"||i==="image")&&c(e).closest("form").length)return ma("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit."+d.guid,function(f){var e=f.target,i=e.type;if((i==="text"||i==="password")&&c(e).closest("form").length&&f.keyCode===13)return ma("submit",this,arguments)})}else return false},remove:function(a,b){c.event.remove(this,"click.specialSubmit"+(b?"."+b.guid:""));c.event.remove(this, -"keypress.specialSubmit"+(b?"."+b.guid:""))}};if(!c.support.changeBubbles){var da=/textarea|input|select/i;function Ca(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d}function ea(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Ca(d);if(a.type!=="focusout"|| -d.type!=="radio")c.data(d,"_change_data",e);if(!(f===v||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}}c.event.special.change={filters:{focusout:ea,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return ea.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return ea.call(this,a)},beforeactivate:function(a){a= -a.target;a.nodeName.toLowerCase()==="input"&&a.type==="radio"&&c.data(a,"_change_data",Ca(a))}},setup:function(a,b,d){for(var f in T)c.event.add(this,f+".specialChange."+d.guid,T[f]);return da.test(this.nodeName)},remove:function(a,b){for(var d in T)c.event.remove(this,d+".specialChange"+(b?"."+b.guid:""),T[d]);return da.test(this.nodeName)}};var T=c.event.special.change.filters}r.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this, -f)}c.event.special[b]={setup:function(){this.addEventListener(a,d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var i in d)this[b](i,f,d[i],e);return this}if(c.isFunction(f)){e=f;f=v}var j=b==="one"?c.proxy(e,function(n){c(this).unbind(n,j);return e.apply(this,arguments)}):e;return d==="unload"&&b!=="one"?this.one(d,f,e):this.each(function(){c.event.add(this,d,j,f)})}});c.fn.extend({unbind:function(a, -b){if(typeof a==="object"&&!a.preventDefault){for(var d in a)this.unbind(d,a[d]);return this}return this.each(function(){c.event.remove(this,a,b)})},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},toggle:function(a){for(var b=arguments,d=1;d0){y=t;break}}t=t[g]}l[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,i=Object.prototype.toString,j=false,n=true;[0,0].sort(function(){n=false;return 0});var o=function(g,h,k,l){k=k||[];var q=h=h||r;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g|| -typeof g!=="string")return k;for(var p=[],u,t,y,R,H=true,M=w(h),I=g;(f.exec(""),u=f.exec(I))!==null;){I=u[3];p.push(u[1]);if(u[2]){R=u[3];break}}if(p.length>1&&s.exec(g))if(p.length===2&&m.relative[p[0]])t=fa(p[0]+p[1],h);else for(t=m.relative[p[0]]?[h]:o(p.shift(),h);p.length;){g=p.shift();if(m.relative[g])g+=p.shift();t=fa(g,t)}else{if(!l&&p.length>1&&h.nodeType===9&&!M&&m.match.ID.test(p[0])&&!m.match.ID.test(p[p.length-1])){u=o.find(p.shift(),h,M);h=u.expr?o.filter(u.expr,u.set)[0]:u.set[0]}if(h){u= -l?{expr:p.pop(),set:A(l)}:o.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=u.expr?o.filter(u.expr,u.set):u.set;if(p.length>0)y=A(t);else H=false;for(;p.length;){var D=p.pop();u=D;if(m.relative[D])u=p.pop();else D="";if(u==null)u=h;m.relative[D](y,u,M)}}else y=[]}y||(y=t);y||o.error(D||g);if(i.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))k.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&& -y[g].nodeType===1&&k.push(t[g]);else k.push.apply(k,y);else A(y,k);if(R){o(R,q,k,l);o.uniqueSort(k)}return k};o.uniqueSort=function(g){if(C){j=n;g.sort(C);if(j)for(var h=1;h":function(g,h){var k=typeof h==="string";if(k&&!/\W/.test(h)){h=h.toLowerCase();for(var l=0,q=g.length;l=0))k||l.push(u);else if(k)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&& -"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,k,l,q,p){h=g[1].replace(/\\/g,"");if(!p&&m.attrMap[h])g[1]=m.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,k,l,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=o(g[3],null,null,h);else{g=o.filter(g[3],h,k,true^q);k||l.push.apply(l,g);return false}else if(m.match.POS.test(g[0])||m.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true); -return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,k){return!!o(k[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"=== -g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,h){return h===0},last:function(g,h,k,l){return h===l.length-1},even:function(g,h){return h%2=== -0},odd:function(g,h){return h%2===1},lt:function(g,h,k){return hk[3]-0},nth:function(g,h,k){return k[3]-0===h},eq:function(g,h,k){return k[3]-0===h}},filter:{PSEUDO:function(g,h,k,l){var q=h[1],p=m.filters[q];if(p)return p(g,k,h,l);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=h[3];k=0;for(l=h.length;k= -0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var k=h[1];g=m.attrHandle[k]?m.attrHandle[k](g):g[k]!=null?g[k]:g.getAttribute(k);k=g+"";var l=h[2];h=h[4];return g==null?l==="!=":l==="="?k===h:l==="*="?k.indexOf(h)>=0:l==="~="?(" "+k+" ").indexOf(h)>=0:!h?k&&g!==false:l==="!="?k!==h:l==="^="? -k.indexOf(h)===0:l==="$="?k.substr(k.length-h.length)===h:l==="|="?k===h||k.substr(0,h.length+1)===h+"-":false},POS:function(g,h,k,l){var q=m.setFilters[h[2]];if(q)return q(g,k,h,l)}}},s=m.match.POS;for(var x in m.match){m.match[x]=new RegExp(m.match[x].source+/(?![^\[]*\])(?![^\(]*\))/.source);m.leftMatch[x]=new RegExp(/(^(?:.|\r|\n)*?)/.source+m.match[x].source.replace(/\\(\d+)/g,function(g,h){return"\\"+(h-0+1)}))}var A=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g}; -try{Array.prototype.slice.call(r.documentElement.childNodes,0)}catch(B){A=function(g,h){h=h||[];if(i.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var k=0,l=g.length;k";var k=r.documentElement;k.insertBefore(g,k.firstChild);if(r.getElementById(h)){m.find.ID=function(l,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(l[1]))?q.id===l[1]||typeof q.getAttributeNode!=="undefined"&&q.getAttributeNode("id").nodeValue===l[1]?[q]:v:[]};m.filter.ID=function(l,q){var p=typeof l.getAttributeNode!=="undefined"&&l.getAttributeNode("id"); -return l.nodeType===1&&p&&p.nodeValue===q}}k.removeChild(g);k=g=null})();(function(){var g=r.createElement("div");g.appendChild(r.createComment(""));if(g.getElementsByTagName("*").length>0)m.find.TAG=function(h,k){k=k.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var l=0;k[l];l++)k[l].nodeType===1&&h.push(k[l]);k=h}return k};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")m.attrHandle.href=function(h){return h.getAttribute("href", -2)};g=null})();r.querySelectorAll&&function(){var g=o,h=r.createElement("div");h.innerHTML="

    ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){o=function(l,q,p,u){q=q||r;if(!u&&q.nodeType===9&&!w(q))try{return A(q.querySelectorAll(l),p)}catch(t){}return g(l,q,p,u)};for(var k in g)o[k]=g[k];h=null}}();(function(){var g=r.createElement("div");g.innerHTML="
    ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length=== -0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){m.order.splice(1,0,"CLASS");m.find.CLASS=function(h,k,l){if(typeof k.getElementsByClassName!=="undefined"&&!l)return k.getElementsByClassName(h[1])};g=null}}})();var E=r.compareDocumentPosition?function(g,h){return g.compareDocumentPosition(h)&16}:function(g,h){return g!==h&&(g.contains?g.contains(h):true)},w=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},fa=function(g,h){var k=[], -l="",q;for(h=h.nodeType?[h]:h;q=m.match.PSEUDO.exec(g);){l+=q[0];g=g.replace(m.match.PSEUDO,"")}g=m.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var i=d;i0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,i={},j;if(f&&a.length){e=0;for(var n=a.length;e --1:c(f).is(e)){d.push({selector:j,elem:f});delete i[j]}}f=f.parentNode}}return d}var o=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(m,s){for(;s&&s.ownerDocument&&s!==b;){if(o?o.index(s)>-1:c(s).is(a))return s;s=s.parentNode}return null})},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(), -a);return this.pushStack(pa(a[0])||pa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")}, -nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);bb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e): -e;if((this.length>1||db.test(f))&&cb.test(a))e=e.reverse();return this.pushStack(e,a,Q.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===v||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!== -b&&d.push(a);return d}});var Fa=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ga=/(<([\w:]+)[^>]*?)\/>/g,eb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,Ha=/<([\w:]+)/,fb=/"},F={option:[1,""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "], -col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
    ","
    "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==v)return this.empty().append((this[0]&&this[0].ownerDocument||r).createTextNode(a));return c.getText(this)}, -wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length? -d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments, -false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&& -!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Fa,"").replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){qa(this,b);qa(this.find("*"),b.find("*"))}return b},html:function(a){if(a===v)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Fa,""):null;else if(typeof a==="string"&&!/